2013-02-04 45 views
0

例如,如果我有c + + make變量不變一旦設置

std::string test; 

我想使試驗恆量只要我初始化。

test = "hi"; 
test = "test"; //this shouldn't work since I already initialized test to hi above 

這是可能的嗎?

+3

在分配「hi」之前,它已經被初始化。 – chris

+0

'std :: string const test =「hi」;'。 –

回答

4

你可以聲明它const並初始化爲你所感興趣的值:

const std::string s = "hi"; 
1

首先你應該瞭解C和C++賦值和初始化之間的差異。 std::string test;調用默認的字符串構造函數,所以test = "hi";也會失敗。

在語言層面上,僅在時間內纔會導致編譯錯誤,因此重新分配內容 - 爲什麼它應該這樣?其中一個會引起混淆,發生的兩個分配將在運行時在一般情況下確定,而不是編譯時間。

正確使用這裏是使用const和「分配」 - 實際上,初始化,根本不分配 - 在它聲明的同一個語句中,即const string str = "hi";

1

另一種選擇是,一旦你有你分配的字符串使用const引用:

std::string s = "hi"; 
const std::string & const_s = s; 
const_s = "test" // compile-time error 

但我同意這聽起來像你只是想初始化一個常量字符串與價值。