特别是在C++中,例如:语义差异是什么:
static const int x = 0 ;
Run Code Online (Sandbox Code Playgroud)
和
const int x = 0 ;
Run Code Online (Sandbox Code Playgroud)
两者static
作为键和存储类说明(即内部和功能外).
Ben*_*igt 119
在文件范围内,C++没有区别. const
使内部链接成为默认值,并且所有全局变量都具有静态生存期.但是第一个变体在C中具有相同的行为,因此这可能是使用它的一个很好的理由.
在函数中,第二个版本可以从参数计算,在C或C++中,它不必像其他语言一样需要编译时常量.
在类中,与函数基本相同,const
可以在ctor-initializer-list中计算实例值.A static const
在启动初始化期间设置,并且对于程序的其余部分保持不变.(注意:static
成员的代码看起来有点不同,因为声明和初始化是分开的.)
请记住,在C++中,const
意味着只读,而不是常量.如果你有一个指向指针,const
那么程序的其他部分可能会在你不看时改变它.如果变量是用定义的const
,那么在初始化之后没有人可以改变它,但是初始化仍然可以是任意复杂的.
C++17 标准草案const
隐含static
在文件范围内
这是引用的内容:https : //stackoverflow.com/a/3709257/895245
C++17 n4659标准草案6.5《程序与联动》:
3 具有命名空间范围 (6.3.6) 的名称具有内部链接,如果它是
- (3.1) — 显式声明为静态的变量、函数或函数模板;或者,
- (3.2) — 非 volatile 常量限定类型的非内联变量,既未显式声明为 extern 也未事先声明为具有外部链接;或者
- (3.3) — 匿名联合的数据成员。
附录 C(资料性)兼容性,C.1.2 第 6 条:“基本概念”给出了从 C 更改的理由:
6.5 [也是 10.1.7]
更改:显式声明为 const 而未显式声明为 extern 的文件范围的名称具有内部链接,而在 C 中它将具有外部链接。
基本原理:因为在 C++ 中的转换过程中,const 对象可能被用作值,因此该特性促使程序员为每个 const 对象提供一个显式的初始化程序。此功能允许用户将 const 对象放入包含在多个翻译单元中的源文件中。
对原始特征的影响:更改为明确定义的特征的语义。
转换难度:语义转换。
使用范围:很少。
另请参阅:为什么 const 在 C++ 中暗示内部链接,而在 C 中却没有?
您可能想要在标题上做的事情
详细解释在:C 和 C++ 中的“const static”是什么意思?
extern
在头文件中,在 cpp 文件中定义 归档时间: |
|
查看次数: |
68035 次 |
最近记录: |