为什么不能使用自动声明的变量?

我正在使用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?

下一篇: Error trying to use pthread on Ubuntu