C++ 数学运算在全局变量初始化中,机器做什么?
编译器在使用“=”符号右侧的数学运算初始化全局变量时做什么 例如:C++ 数学运算在全局变量初始化中,机器做什么?,c++,runtime,compile-time,C++,Runtime,Compile Time,编译器在使用“=”符号右侧的数学运算初始化全局变量时做什么 例如: int global1=75; int global2=32+84; int global3=(global1+global2); int main(){ return global3; } 程序应该返回191=(75+(32+84)) 我不知道编译时或运行时< /P> < > >代码> 32 + 84 < /COD>是一个“常量表达式”,这是C和C++标准中的一个艺术术语,本质上是一个算术表达式,其值可以在不要求编译器知道
int global1=75;
int global2=32+84;
int global3=(global1+global2);
int main(){
return global3;
}
程序应该返回191=(75+(32+84))
我不知道编译时或运行时< /P> < > >代码> 32 + 84 < /COD>是一个“常量表达式”,这是C和C++标准中的一个艺术术语,本质上是一个算术表达式,其值可以在不要求编译器知道任何变量的值的情况下计算出来。当使用常量表达式初始化全局变量时,如
int global2=32+84;
从技术上讲,C和C++标准都不需要在编译时对加法进行评估,但是很难找到一个没有这样做的编译器。(还有其他一些情况下,编译器确实必须在编译时计算常量表达式,因此它必须有代码来进行计算,所以它也可以一直这样做。)
global1+global2
不是一个“常量表达式”。在C语言中,这意味着它不能用于初始化全局变量;您将得到一个编译时错误。在C++中,它是允许的,并且未指定加法是否发生在编译时间或运行时。唯一的保证是global3
将在main
开始执行时具有正确的值;特别是,如果从全局对象的构造函数中观察到,它可能没有正确的值
(根据经验,g++6在运行时计算global3
的值,而clang++3.9在编译时计算,这证实了这两种可能性在实践中都会发生。)
<>(在C++中,<代码> > GULAL1+GULAL2如果是int global2=32+84;
从技术上讲,C和C++标准都不需要在编译时对加法进行评估,但是很难找到一个没有这样做的编译器。(还有其他一些情况下,编译器确实必须在编译时计算常量表达式,因此它必须有代码来进行计算,所以它也可以一直这样做。)
global1+global2
不是一个“常量表达式”。在C语言中,这意味着它不能用于初始化全局变量;您将得到一个编译时错误。在C++中,它是允许的,并且未指定加法是否发生在编译时间或运行时。唯一的保证是global3
将在main
开始执行时具有正确的值;特别是,如果从全局对象的构造函数中观察到,它可能没有正确的值
(根据经验,g++6在运行时计算global3
的值,而clang++3.9在编译时计算,这证实了这两种可能性在实践中都会发生。)
<>(在C++中,< < > > > GULLAL1+GULAL2如果被认为是一个常量表达式,如果<代码> GULAL1和