gpt4 book ai didi

c++ - 为什么不能 cin 到自动声明的变量?

转载 作者:太空狗 更新时间:2023-10-29 21:01:40 26 4
gpt4 key购买 nike

我正在使用 GCC 编译器试验 C++11 的特性。我发现以下代码无法编译,我不确定为什么。我期望 name 的类型会自动从初始化值中推导出来。

int main()
{
auto name = "";
cin >> name; // compile error occurs here
cout << "Hello " << name << endl;
return 0;
}

产生的错误是:

cannot bind 'std::istream {aka std::basic_istream}' lvalue to 'std::basic_istream&&'| c:\program files\codeblocks\mingw\bin..\lib\gcc\mingw32\4.7.1\include\c++\istream|866|error: initializing argument 1 of '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;

关于c++ - 为什么不能 cin 到自动声明的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17612056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com