Dre*_*ann 6 c++ standards static const
我的印象是C++将相同的特殊规则应用于static const整数类型,无论是在命名空间范围内声明还是在类/结构/联合中声明.
现在我想我已经被不合规的编译器教给了Bad Things.
static const int A = 1;
struct s
{
static const int A = 1;
};
Run Code Online (Sandbox Code Playgroud)
除了明显的范围差异,如何做A和s::A有所不同?
我特别好奇C++ 03.
关键字static在类范围和命名空间范围内并不意味着相同.实际上,它在命名空间范围中的使用已被弃用.
在类范围声明变量时,static意味着将有一个变量的单个实例,具有静态存储持续时间和生存期.类中的声明不是定义; 如果在可变使用,它必须在一个(且仅一个)的转换单元中定义; 如果未定义,则表示未定义的行为.(在实践中,根据不同的用途,要么一切都将正常工作,否则你会从连接出现错误.)请注意,如果该声明是一个const整体式,并包含一个初始化,它
不认为是使用过,如果它是在需要常量积分表达式的上下文中使用(如C样式数组的维度).最简单和最可靠的事情就是在某处定义它.
在命名空间范围内声明变量时,static意味着该名称具有内部链接,而不是外部; 无论有没有static,声明都是一个定义(因此程序中不应该有其他定义).在C++ 03中,这个用法已被弃用; 请改用未命名的命名空间.另请注意,如果变量本身是const(顶级const),则默认情况下它具有内部链接,因此static无论如何都没有效果.(如果需要const具有外部链接的变量,使其成为类成员,或者显式定义它extern,使用初始化程序使其成为定义,而不仅仅是声明.)