2015-04-02 86 views
1

雖然我認爲它不會是一個很好的做法,我使用的編譯器(包括GNU和鐺)似乎讓類似下面的大括號或相等的初始化

 int f() {return 11;} 

     class A { 

      int a = f(); 
      public: 
      int tell_me() {return a;} 
       }; 

即其中通過調用完全無關的函數來進行括號或相等的初始化。

這是正確的,並允許由標準? 執行f()最終引入的附帶效應如何?

+0

由於優化,編譯器可能會用11替換f(),如果不進行優化,就像user2079303回答一樣。 – 2015-04-02 08:59:35

+0

你可以使用[constexpr說明符](http://en.cppreference.com/w/cpp/language/constexpr),編譯器可以在編譯時進行評估。 – 2015-04-02 09:13:10

回答

1

這是正確的,並允許標準?

是。

最終由執行f()引入的間接影響如何?

當函數執行時發生副作用,這發生在構建A時發生。完全像他們會使用初始化列表一樣。