What effect does static const have on a namespace member
1 2 3 4 5 6 7 8 9 10 11 | // MyClass.h namespace MyNamespace { static const double GasConstant = 1.987; class MyClass { // constructors, methods, etc. }; } |
我以前在MyClass声明中声明了Gas常数(并且在源文件中有一个单独的定义,因为C++不支持EDCOX1,0)非整数类型的初始化)。但是,我需要从其他文件访问它,而且从逻辑上看,它应该位于名称空间级别。
我的问题是,在这种情况下,
在命名空间范围< S>中使用EDCOX1 0,在C++中被定义为。它通常只在源文件中出现,其作用是使变量成为该源文件的局部变量。也就是说,另一个源文件可以有一个完全相同名称的变量,而不会发生冲突。
在C++中,对源文件进行局部变量的推荐方法是使用匿名命名空间。
我认为公平地说,您代码头中的
*如汤姆在评论中所指出的(并且在这个答案中),C++委员会推翻了在文件范围内使用EDCOX1 0的使用的决定,因为这种用法将永远是语言的一部分(例如对于C兼容性)。
MSDN表示:
When modifying a variable, the static keyword specifies that the
variable has static duration (it is
allocated when the program begins and
deallocated when the program ends) and
initializes it to 0 unless another
value is specified. When modifying a
variable or function at file scope,
the static keyword specifies that the
variable or function has internal
linkage (its name is not visible from
outside the file in which it is
declared).
记住,包含头文件意味着用头文件的实际代码替换"include"-指令。因此,静态变量只在包含两个头文件的".cpp"(已编译)文件中可见。
所以每个"cpp"文件(包括头文件)都有自己的静态变量。
如果这是头文件,那么
我假设您只是将声明从类移到了名称空间中。但在类声明上下文和命名空间上下文中,