我正在研究静态和常量关键字。程序员何时使用'static'和'const'关键字?
静态:使用静态修饰符来声明静态成员,该静态成员属于类型本身,而不是属于特定对象。
const:你使用const关键字来声明一个常量字段或一个常量本地。该关键字指定该字段或局部变量的值是常量,这意味着它不能被修改。
我想知道关于程序员使用静态和常量关键字的例子。
我正在研究静态和常量关键字。程序员何时使用'static'和'const'关键字?
静态:使用静态修饰符来声明静态成员,该静态成员属于类型本身,而不是属于特定对象。
const:你使用const关键字来声明一个常量字段或一个常量本地。该关键字指定该字段或局部变量的值是常量,这意味着它不能被修改。
我想知道关于程序员使用静态和常量关键字的例子。
const的变量或常量,将用于声明不会改变的值或者你想从防止正在改变。例如,Pi可以在C++中声明为常量。
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();
}
}
将打印:
0
1
2
3
4
即使栏超出范围,它的价值仍然在内存中,所以它只能初始化一次。每次调用foo()时,该值都会递增。
编辑:
为了澄清,编译器将实际上是它产生汇编代码内的静态变量保留存储器。此外,static关键字还会告诉编译器只精确地初始化变量一次。变量的范围是相同的(在foo函数内部),但是在上述情况下它仅被初始化一次。当函数被调用时,自动变量(例如int i)被压入调用堆栈。
如果你尝试覆盖const变量>? – variable
GCC抱怨抛出错误,因为你基本上说你的const实际上不是一个const。 – csnate
但每次你分配int bar = 0;所以为什么它没有得到解决? – EverythingEthical
如果你想让任何变量/方法可用,而不考虑静态成员的对象,但是如果你希望同样的变量不可修改,那么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; }
}
(所有这一切都为Langage C++)
嗨,你可以使用常量和静态关键字在少数情况下,对于为例:
常量
首先,用来说变量不能被修改。
int main()
{
const int toto[4] = {0, 1, 2, 3};
return (0);
}
//我们不能在声明后修改toto,为什么它有用?它保持你的程序设计的状态
第二个,用来说一个方法不会修改对象状态。
class toto
{
int i;
public:
int geti() const;
}
// CPP中的所有吸气剂都使用它。为什么它有用?使用该类的开发人员知道他不修改对象状态
第三个,用于说明传递给函数的参数不被函数修改。
int function(const std::string &str)
{
// function cannot modify the object string pass in parameter
}
静态
首先,过去常说,一个实现的功能是只知道内一个单一的文件。
static int fct()
{
return (0);
}
//可以调用ONY功能FCT()如果你是谁内就实现
二文件,过去常说,一个参数或方法是共同的所有对象同班。
class toto
{
public :
static int getLol();
};
//每个对象totoObj1,totoObj2 ...将调用相同的功能
第三和最后一个,过去常说,一个变量不相同功能的多个呼叫之间改变状态的地方声明
void fct()
{
static i = 0;
std::cout << ++i << std::endl;
}
//这个函数会打印1然后2然后3 ...
如果您有任何疑问,欢迎您:)
我想这个问题会更适合在[programmers.stackexchange.com](http://programmers.stackexchange.com/) – ponciste