Static 程序员何时使用';静态';和';常数';关键词?
我正在研究静态和常量关键字 静态:使用静态修饰符声明静态成员,该成员属于类型本身而不是特定对象 const:使用const关键字来声明常量字段或常量本地字段。此关键字指定字段或局部变量的值为常量,这意味着它不能修改Static 程序员何时使用';静态';和';常数';关键词?,static,constants,Static,Constants,我正在研究静态和常量关键字 静态:使用静态修饰符声明静态成员,该成员属于类型本身而不是特定对象 const:使用const关键字来声明常量字段或常量本地字段。此关键字指定字段或局部变量的值为常量,这意味着它不能修改 我想知道程序员何时会使用static和const关键字的示例。如果您希望任何变量/方法都可用,而不管对象是什么,您都可以使用静态成员,但如果您希望该变量/方法也不可修改,那么const就是解决方案。下面的例子可以帮助您理解这一点 在下面的例子中 PI定义为常数,不能/不应更改 联机
我想知道程序员何时会使用static和const关键字的示例。如果您希望任何变量/方法都可用,而不管对象是什么,您都可以使用静态成员,但如果您希望该变量/方法也不可修改,那么const就是解决方案。下面的例子可以帮助您理解这一点 在下面的例子中
- PI定义为常数,不能/不应更改
- 联机保存联机用户的数量,它可以更改,但无论对象如何,都应该可用
public class Example { //PI should not be changed, with reasons known that it is a constant public const double PI = 3.14; //Users currently using the application public static int ONLINE = 0; public Example(){ ONLINE++; } public void dispose(){ ONLINE--; } public static int loggedInUsers(){ return ONLINE; } public void GetArea(int radius){return PI*radius*radius; } }
const double kPi = 3.14159265359;
静态变量有点不同。静态变量只有一个实例在类\函数之间持续存在
例如:
void foo()
{
static int bar = 0;
printf("%d\n", bar);
++bar;
}
int main()
{
int i;
for(i = 0; i < 5; ++i)
{
foo();
}
}
即使bar超出范围,它的值仍在内存中,所以它只初始化一次。每次调用foo()时,该值都会递增
编辑:
为了澄清这一点,编译器实际上会在其生成的汇编代码中为静态变量保留内存。此外,static关键字还告诉编译器只初始化变量一次。变量的作用域是相同的(在foo函数中),但在上述情况下只初始化一次。调用函数时,自动变量(如int i)被推送到调用堆栈上。(所有这些都是针对Langage C++)
您好,您可以在少数情况下使用常量和静态关键字,例如:
常数
首先,用于表示变量不能修改
int main()
{
const int toto[4] = {0, 1, 2, 3};
return (0);
}
//我们不能在声明后修改toto,为什么它有用?它保持程序设计的状态
秒,用于表示方法不修改对象状态
class toto
{
int i;
public:
int geti() const;
}
//CPP中的所有getter都使用它。为什么它有用?使用该类的开发人员知道他不会修改对象状态
第三个,用于表示传递给函数的参数不是由函数修改的
int function(const std::string &str)
{
// function cannot modify the object string pass in parameter
}
静态
首先,用于表示实现的函数仅包含在单个文件中
static int fct()
{
return (0);
}
//如果您是实现该函数的文件的内部成员,则可以只调用函数fct()
第二个,用于表示一个参数或方法对于同一类的所有对象都是公共的
class toto
{
public :
static int getLol();
};
//每个对象totoObj1,totoObj2。。。将调用相同的函数
第三个也是最后一个,用于表示变量在声明它的同一函数的多次调用之间不改变状态
void fct()
{
static i = 0;
std::cout << ++i << std::endl;
}
void fct()
{
静态i=0;
std::我想这个问题是否更适合于尝试覆盖const variable>?GCC抱怨抛出一个错误,因为本质上你是说你的const实际上不是一个const。但是每次你赋值int bar=0,为什么它没有得到reset?不,你不是每次调用foo()都赋值。当您使用静态变量时,您告诉编译器只初始化变量一次。如果您在上面的示例中查看编译器生成的程序集,您将发现程序集输出中实际存在一个空间,用于保存静态变量。自动变量(如上面示例中的int i)在运行时被推送到函数调用的堆栈上。但是您正在指定int bar=0。您不仅在初始化,而且还在赋值。就像bar一样++
void fct()
{
static i = 0;
std::cout << ++i << std::endl;
}