2014-10-01 184 views
-1

在C++中'const'是在編譯期間還是在運行期間計算? 爲什麼我可以在運行時分配值?C++ const數據初始化

class A{ 
    public: 
     const int a; 
    A():a{100}{ // if const's need compile-time evaluate why we can do this 
    } 
}; 

主:

A* a = new A(); // const do no assign(or initialization?) until run-time... 
+0

誰告訴你const只能在編譯時設置? – Galik 2014-10-01 07:35:45

+0

@Galik C#''const':))但它非常不同)) – Zed123456 2014-10-01 07:40:13

+0

@ Zed123456:的確,不同的語言是不同的。不要試圖根據你對另一種語言的理解來猜測一種語言是如何工作的。 – 2014-10-01 07:43:22

回答

2

在C++ const是在編譯時或運行時計算?

這取決於。如果它是一個非成員變量,由一個常量表達式初始化,那麼該值可以由編譯器分配。如果它是一個非靜態的類成員,或者用編譯時未知的值初始化,那麼它將不得不在運行時初始化。

爲什麼我可以在運行時分配值?

你不行。您可以使用運行時值初始化它,但在初始化後您無法分配新值。這就是const的含義。

+0

如果它是一個用常量表達式初始化的局部變量,它也是一個編譯時常量,這就是爲什麼'template void f(){} int main(){const int i = 0; f (); }'是一個有效的程序(不做任何事)。 – hvd 2014-10-01 07:37:13

+0

這就像看C#的'readonly'嗎? – Zed123456 2014-10-01 07:38:19

+0

@ hvd:是的,你說得對。我認爲我的更新或多或少是準確的,儘量不覆蓋這些規則的細微差別,使答案複雜化。 – 2014-10-01 07:40:40