我正在使用GCC编译器试验C++ 11的功能。我发现下面的代码不能编译,我不知道为什么。我期待name
的类型会自动从初始化值中推导出来。为什么不能使用自动声明的变量?
int main()
{
auto name = "";
cin >> name; // compile error occurs here
cout << "Hello " << name << endl;
return 0;
}
产生的错误是:
cannot bind 'std::istream {aka std::basic_istream}' lvalue to 'std::basic_istream&&'| c:\program files\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\istream|866|error: initializing argument 1 of 'std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&&, _Tp&) [with _CharT = char; _Traits = std::char_traits; _Tp = const char*]'|
究竟是什么意思?
请注意,如果您明确指定name
作为string
,则不存在任何问题。
'name'是'为const char [1]'。你不能''那个。 – chris
尝试用'auto name = std :: string(“”)'。较长的回答:正如chris(和你的编译器)所说的,'auto'似乎是解析为一个'const'变量('_Tp = const char *]'),你不能'cin >>到那个。 – Nbr44
@ Nbr44,除了'std :: string name;'变得更加明智:)重点是尝试'auto',不过,所以... – chris