为什么无法查询自动声明的变量?

时间:2013-07-12 09:47:00

标签: c++ auto cin

我正在使用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&amp;&amp;'|   c:\ program files \ codeblocks \ mingw \ bin .. \ lib \ gcc \ mingw32 \ 4.7.1 \ include \ c ++ \ istream | 866 |错误:   初始化'std :: basic_istream&lt; _CharT,_Traits&gt;&amp;的参数1 std :: operator&gt;&gt;(std :: basic_istream&lt; _CharT,_Traits&gt;&amp;&amp;,_Tp&amp;)[with _CharT = char; _Traits = std :: char_traits; _Tp = const char *]'|

这究竟是什么意思?

注意,如果您明确指定namestring,则没有问题。

2 个答案:

答案 0 :(得分:4)

您无法“写入”auto变量的原因是它是const char *const char [1],因为这是任何字符串常量的类型。

auto的要点是解析为分配类型“有效”的最简单的类型。编译器“不期待看到你对变量做了什么”,所以它不明白以后你会想要写入这个变量,并用它来存储一个字符串,所以std::string会更有意义。

您的代码可以以多种不同的方式工作,这是一个有意义的方法:

std::string default_name = "";
auto name = default_name;

cin >> name;

答案 1 :(得分:0)

这可能对您有用,

string getname()
{
  string str;
  cin>>str;
  return str;
}

int main()
{
    auto name = getname();
    cout << "Hello " << name << endl;

return 0;
}