为什么不能使用自动声明的变量?
我正在使用GCC编译器试验C ++ 11的功能。 我发现下面的代码不能编译,我不知道为什么。 我期待从初始化值自动推断出这个name
的类型。
int main()
{
auto name = "";
cin >> name; // compile error occurs here
cout << "Hello " << name << endl;
return 0;
}
产生的错误是:
不能绑定'std :: istream {aka std :: basic_istream}'左值为'std :: basic_istream &&'| c: program files codeblocks mingw bin .. lib gcc mingw32 4.7.1 include c ++ istream | 866 | error:初始化参数1'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
则不存在任何问题。
你不能“写”到你的auto
变量的原因是它是一个const char *
或const char [1]
,因为那是任何字符串常量的类型。
auto
的要点是解决为作业类型“最适合”的最简单的类型。 编译器不会“期待看到你在用变量做什么”,所以它不理解你稍后想要写入这个变量,并用它来存储一个字符串,所以std::string
会更有意义。
你的代码可以用许多不同的方式工作,这是一个有意义的方法:
std::string default_name = "";
auto name = default_name;
cin >> name;
这可能对你有用,
string getname()
{
string str;
cin>>str;
return str;
}
int main()
{
auto name = getname();
cout << "Hello " << name << endl;
return 0;
}
链接地址: http://www.djcxy.com/p/86965.html
上一篇: Why is it not possible to cin to an auto declared variable?