赋值和初始化是两个概念。
对于全局变量,C++运行时会在程序的控制权交给main函数之前对其进行初始化。赋值指的是,已经初始化的变量,重新设置其值。设置值需要程序运行过设置值得代码之后才能成功。
因此由于main函数之外的代码是不会被执行的因此也就不存在赋值的操作。(如果这样写代码,编译器会报错)。
对于全局变量,对于基础类型,默认会初始化为0。
对于定义在函数内的静态变量,会在第一访问函数是,初始化,该静态对象。
class A
{
public:
A(){std::cout << "A constructor!\n";}
};
void accessA()
{
static A a;
}int main()
{
std::cout << "main enter\n";
accessA();
}
结果:
main enter
A constructor!
明白了。赋值 是运算。在编译器是不能进行运算的,对吧
@涛洛伊: C++11有constexpr关键字,能够让编译器在编译时尽量计算表达式的值。如果没有使用这个关键字即使编译时期可以确定值的表达式,编译器也可能不计算(这与编译器的优化有关),而将计算表达式的任务放在运行时完成。