关于é™æ€å±€éƒ¨å˜é‡çš„澄清

时间:2017-09-03 16:33:04

标签: c++ static

在链接Storage Class Specifier

中

主题é™æ€å±€éƒ¨å˜é‡ 我读了那个

  

在å—作用域中使用指定符static声明的å˜é‡å…·æœ‰é™æ€å­˜å‚¨æŒç»­æ—¶é—´ï¼Œä½†åœ¨æŽ§ä»¶ç¬¬ä¸€æ¬¡é€šè¿‡å…¶å£°æ˜Žæ—¶åˆå§‹åŒ–(除éžå®ƒä»¬çš„åˆå§‹åŒ–为零或åˆå§‹åŒ–åˆå§‹åŒ–,这å¯ä»¥åœ¨é¦–次输入å—之å‰æ‰§è¡Œï¼‰

我ä¸æ˜Žç™½å®ƒçš„实际å«ä¹‰æ˜¯ä»€ä¹ˆï¼š

  

å¯ä»¥åœ¨é¦–次输入之å‰æ‰§è¡Œ

å¦å¤–,é™æ€æœ¬åœ°å˜é‡æ˜¯å¦å¯ä»¥è¯´æ˜¯æ— é“¾æŽ¥ï¼Ÿ

如果有必è¦ï¼Œè¯·ä½ ä¸¾ä¸€äº›ä¾‹å­å—?感谢

1 个答案:

答案 0 :(得分:4)

相关部分是åˆå§‹å€¼å·²çŸ¥çš„时间 如果已知有é¢å¤–çš„ä¿è¯ï¼Œå®ƒå°†åœ¨å—首次执行之å‰ä¸ä¼šæ›´æ”¹ã€‚

下é¢æ˜¯ä»£ç å’Œä¸€äº›ä¾‹å­ã€‚

int foo(void);

void bar(void)
{
    static int ZeroInit;     // zero init
    static int a = 0;        // constant init
    static int b = 4;        // constant init
    // values for above inits are known at start of runtime and even earlier

    static int c = foo();
    // dynamic init, value unknown before execution of foo(),
    // which cannot (i.e. is defined not to) be done before executing the block

    /* code */
}