首页 新闻 会员 周边 捐助

C 结构体全局赋值的问题

0
悬赏园豆:10 [已解决问题] 解决于 2016-06-02 22:03

 

 

 

 

 

为什么在MAIN函数里赋值就可以 在 函数外面不能赋值呢?

涛洛伊的主页 涛洛伊 | 初学一级 | 园豆:79
提问于:2016-06-02 01:43
< >
分享
最佳答案
0

赋值和初始化是两个概念。

对于全局变量,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!

收获园豆:10
十月1993 | 菜鸟二级 |园豆:214 | 2016-06-02 02:33

明白了。赋值 是运算。在编译器是不能进行运算的,对吧

涛洛伊 | 园豆:79 (初学一级) | 2016-06-02 22:13

@涛洛伊: C++11有constexpr关键字,能够让编译器在编译时尽量计算表达式的值。如果没有使用这个关键字即使编译时期可以确定值的表达式,编译器也可能不计算(这与编译器的优化有关),而将计算表达式的任务放在运行时完成。

十月1993 | 园豆:214 (菜鸟二级) | 2016-06-03 01:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册