我經常困擾const正確性,這似乎也不例外。請告訴我爲什麼下面的代碼不會編譯:無法轉換參數 - 轉換失去限定符
class string_token_stream
{
public:
typedef wchar_t* string_type;
string_token_stream(const string_type input_string)
: _input_string(input_string)
{
}
private:
const string_type _input_string;
};
int main(int argc, char **argv)
{
const wchar_t *str = get_a_string_somewhere();
string_token_stream sts(str);
// ^------ Compile-time error C2664.
return 0;
}
給出的錯誤是:
error C2664: 'string_token_stream::string_token_stream(const string_token_stream::string_type)' : cannot convert parameter 1 from 'const wchar_t *' to 'const string_token_stream::string_type'
1> Conversion loses qualifiers
我在編譯的Visual C++ 2010速成。可根據要求提供其他編譯/鏈接器選項。
「... const被忽略...」。你能更精確地說明爲什麼忽略這個常量(或者在轉換中沒有考慮到)嗎? – 2012-03-05 04:50:13
@ J.N .:'string_token_stream(const string_type input_string)'中的'const'使'input_string'爲const,而不是它指向的內容。如果你嘗試在函數內部分配'input_string',編譯器會給你一個錯誤,比如'只讀參數'input_string''的賦值。我認爲這是來自'const/volatile type'和'type const/volatile'等價的事實,順序並不重要。 – 2012-03-05 05:06:59
@亞歷克斯:是的,謝謝,我自己弄清楚了,所以有一個相關的問題。 – 2012-03-05 05:17:31