與C++

2012-11-10 17 views
1

常數初始化是什麼在以下方面的區別:與C++

#include <iostream> 

using namespace std; 

int get_value(int value){ 
    return 3 * value; 
} 


int main(int argc, const char * argv[]) 
{ 

    const int a = 5; 
    const int b = get_value(4); 


    return 0; 
} 

那是const int的一個存儲在BSS部分和const int的B中的唯一區別是不是和這兩個仍在執行在編譯器方面。

因此,因爲存儲在bss中它是否更快?作爲一個const編譯時間計算,這是constexpr的用例嗎?會constexpr使B常量存儲在BSS部分?

布萊爾

+3

該語言沒有提到最終可執行文件的佈局;編譯器動態分配這兩個參數並確保它們被自動釋放(這是「自動存儲持續時間」中的「自動」來自哪裏)對於編譯器來說是完全有效的。當然,這樣做會很浪費,也很愚蠢。如果你擔心這個問題,請參考你的編譯器的文檔並查看輸出。 – GManNickG

+1

與GManNickG的回答相反,編譯器優化兩個變量以使它們不存儲在任何地方也是完全可以接受的。 GManNickG是正確的唯一方法來回答這個問題是檢查你的編譯器/鏈接器的輸出。 C++語言沒有提到這些問題。 – john

回答

0

既然你已包括在你的問題constexpr標籤我假定你可以使用C++ 11 constexpr,所以你可以在你的功能更改爲constexpr int get_value(constexpr int value);,然後使用功能類似constexpr int b = get_value(4);。這將確保計算將在編譯時完成,並且b可以通過像預處理常量這樣的編譯器進行優化。然而,如果你在程序中的任何地方,你會得到一個指向b的指針(例如int* p = &b),b未被優化,因此在運行時存儲在內存中。