c******n 发帖数: 4965 | 1 class blah{
}
void fun() {
static blah myblah;
}
int main(int argc,char** argv) {
fun();
fun();
return 0;
}
你可以用g++ -S -o out.S mycode.cc
看看输出的assembly, compiler 自己生成了一个var 记录static var myblah 有否被
initialized 过 | X****r 发帖数: 3557 | 2 因为C++规定局部静态非POD变量必须在控制第一次进入这个函数初始化。
【在 c******n 的大作中提到】 : class blah{ : } : void fun() { : static blah myblah; : } : int main(int argc,char** argv) { : fun(); : fun(); : return 0; : }
| z****e 发帖数: 2024 | 3 红猪侠的semantics是越来越高级了。
我理解,这个编译器自动生成的记录,也是以后“条件析构”conditional
destruction 的依据。
很久以前不是所有全局静态都要在startup时候初始化么?但是C++有了lazy
evaluation 机制,就能initialize on invocation.这条记录,就是析构的时候看用不
用析构。
【在 X****r 的大作中提到】 : 因为C++规定局部静态非POD变量必须在控制第一次进入这个函数初始化。
|
|