为什么不可能对自动声明的变量进行cin
Why is it not possible to cin to an auto declared variable?
我正在使用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}"lvalue绑定到"std::basic_stream&;'|c: \program files\codeblocks\mingw\bin。。\lib\gcc\mingw32\4.7.1\include\c++\istream|866|错误:正在初始化"std::basic_stream<"的参数1_CharT,_Traits>&std::运算符>>(std::basic_stream<_CharT,_Traits>&,_Tp&)[其中_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;
}
相关文章:
- std::cin 从控制台获取两种不同的变量类型,'storing'以后使用第二种类型?
- 如果输入类型与目标类型不同,"cin"变量是否重置为某个默认值?
- C++使用cin给变量一个非整数的值
- 如何使用CIN将输入整数值获取到char类型变量中
- 使用CIN时,字符串变量不会被覆盖
- 如果 (!(cin >>变量名称)) 在此循环中
- std::cin 无法将命令行中的用户输入传递给具有 char 类型的变量吗?
- "cin >>变量"不等待输入
- C++ getline(cin,变量)行为不端.网站上没有任何解决方案有帮助
- C 初始化一个变量并使用std :: cin分配
- 向我解释CIN在数量变量的小数价通过时如何工作
- 我如何评估来自CIN的变量的表达式
- 为什么我不能继续使用 std::cin 向同一变量输入其他值?
- 使用CIN和COUT时,字符变量无法正确打印
- 为什么在 sync_with_stdio(false) 之前使用 cin 为下一个 i/p 变量提供随机值
- C++ 在 switch 语句中,cin.getline 不会分配给 c 字符串变量
- CIN中断时为什么会发生变量?C
- 将 (cin >> someVar) 的返回分配给 istream 变量时出错 C++
- 直接捕获CIN作为参数,而无需临时变量
- std::cin 错误状态和变量更改