2013-05-20 77 views
1

所以我有一個類,它有一個常量字符串數據成員。const數據成員

從用戶接收到的字符串本身。

我該如何編寫一個可以使用它的構造函數,以及如何從用戶處獲取字符串並將其放入類中?

感謝

+0

作爲建議的一般一塊,不可轉讓的數據成員(諸如'的std :: string const成員;')可以使班級尷尬使用。將非const的成員保留下來是非常常見的,同時確保類的用戶只有通過非可變接口才能看到它,如果他們需要查看它的話。這些建議似乎違背了常量安全的精神,但它可以免除你很多痛苦。 –

+0

@LucDanton我認爲沒有。它不違背常數安全的精神。常量安全更多的是當類處於「恆定狀態」或其他狀態時類的行爲。它更多的是類接口對其成員施加的約束,而不是成員對類接口施加的約束。所以,簡單地說,你的建議是正確的。 :) –

回答

5

初始化const成員(以及參考成員),你需要使用constructor initialization lists

這是你會怎麼做它在C++ 11(字符串是按值傳遞,然後移動,這樣,當一個右值中輸入的是構造不復制將被執行):

#include <string> 

struct X 
{ 
    X(std::string s_) : s(std::move(s_)) { } 
//     ^^^^^^^^^^^^^^^^^^ 
    std::string const s; 
}; 

在C++ 03你會做這種方式:

#include <string> 

struct X 
{ 
    X(std::string const& s_) : s(s_) { } 
//       ^^^^^^^ 
    std::string const s; 
};