全局变量/const和全局静态变量/const在C++上有什么不同吗?在cpp文件或头文件中声明。
static const int x1 = someFunction(5);
const int x2 = someFunction(6);
static int x3 = someFunction(5);
int x4 = someFunction(6);
int main()
{
...发布于 2021-12-29 18:35:31
案例一:用于const对象
相似性
在这两个版本中,变量都有内部链接。也就是说,x1和x2都有内部联系。
差异
对于static const int x1,变量是显式静态,而对于const int x2,变量是隐式静态。但请注意,它们仍然有内在的联系。
案例二:对于非连续对象
相似性
x3和x4都是非can ,这意味着我们可以修改它们。
差异
变量x3具有内部链接,而变量x4具有外部链接。
发布于 2021-12-29 18:25:52
注意:这只在变量不是const时才适用。我已经根据OP的要求取消了这个答案,
static int x1有内部链接,这意味着它只能通过名称从定义在其中的翻译单元(这个cpp文件)访问。如果此行位于头文件中,则包含头文件的每个文件都将得到变量的自己的副本。
int x2具有外部链接,这意味着另一个翻译单元(cpp文件)可以在全局范围内拥有extern int x2;并访问变量。如果这一行位于头文件中,并且多个文件包含头文件,则违反了一种定义规则,因为每个包含只定义一次变量。您必须在头文件中使用extern int x2;,然后在单个cpp文件中使用int x2 = ...;以避免多个定义。
请参阅持续时间
https://stackoverflow.com/questions/70523134
复制相似问题