为什么不可能对自动声明的变量进行cin

Why is it not possible to cin to an auto declared variable?

本文关键字:变量 cin 声明 不可能 为什么      更新时间:2023-10-16

我正在使用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&amp;'|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;
}