我经常被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;
}
Run Code Online (Sandbox Code Playgroud)
给出的错误是:
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
Run Code Online (Sandbox Code Playgroud)
我正在编译Visual C++ 2010 Express.可根据要求提供其他编译/链接器选项.
当你写下时const string_type input_string,const对于typedef会被忽略.所以你试图转换const wchar_t*为wchar_t*.如果您更改typedef wchar_t* string_type;到typedef const wchar_t* string_type;它应该编译.
const string_type input_string看起来会像wchar_t *const input_string你期望的那样const wchar_t*.你可以通过更改const wchar_t *str来看到wchar_t *const str它,它也可以工作.