我正在研究static和const关键字。
静态:使用static修饰符声明一个静态成员,该成员属于该类型本身而不是特定对象。
const:使用const关键字声明常量字段或常量局部。此关键字指定字段或局部变量的值是常量,这意味着它不能被修改。
我想知道程序员何时使用static和const关键字的例子。
答案 0 :(得分:3)
const变量或常量将用于声明一个不会改变的值,或者你想要防止被改变的值。例如,Pi可以在C ++中声明为常量。
const double kPi = 3.14159265359;
静态变量有点不同。只有一个静态变量实例在类\ functions之间存在。
例如:
void foo()
{
static int bar = 0;
printf("%d\n", bar);
++bar;
}
int main()
{
int i;
for(i = 0; i < 5; ++i)
{
foo();
}
}
会打印:
0
1
2
3
4
即使bar超出范围,它的值仍然在内存中,因此它只被初始化一次。每次调用foo()时,该值都会递增。
编辑:
为了澄清,编译器实际上将为其生成的汇编代码中的静态变量保留内存。另外,static关键字还告诉编译器初始化变量一次。变量的范围是相同的(在foo函数内),但在上述情况下它只被初始化一次。调用函数时,自动变量(例如int i)被压入调用堆栈。
答案 1 :(得分:2)
(所有这些都是针对Langage C ++)
嗨,在极少数情况下你可以使用const和static关键字,例如:
的 CONST 强> 的
首先,过去常说无法修改变量。
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;
}
//此功能将打印1然后2然后3 ...
如果您有任何疑问,欢迎您:)
答案 2 :(得分:0)
如果你想让任何变量/方法可用而不管你是一个静态成员的对象,但如果你想让它同样不可修改,那么const就是解决方案。以下示例可以帮助您理解这一点。
在下面的例子中
ONLINE保持在线用户数量,可以更改但无论对象是否可用
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; }
}