【问题标题】:c++ auto cin example时间:2019-04-01 标签:c++autocinexample
【发布时间】:2018-03-30 17:48:16
【问题描述】:

我收到类似的错误

/hackerearth/CPP14_28/s_e3.cpp: In function ‘int main()’: /hackerearth/CPP14_28/s_e3.cpp:6:10: error: declaration of ‘auto x’ has no initializer auto x; ^ 

我的代码是,

#include <iostream>
using namespace std;

int main()
{
    auto x;
    cin >> x;
    cout << x;
    return 0;
}

我想要动态分配数据类型的类似功能

【问题讨论】:

  • 你不能那样做。在 C++ 中,类型是在编译时确定的。
  • 我希望在 c++14 preshing.com/20141202/cpp-has-become-more-pythonic 中是可能的。但我算没找到办法
  • 你不能使用'auto x;'需要根据参考使用[en.cppreference.com/w/cpp/language/auto]
  • 怎么办??
  • auto 根据您初始化变量的方式确定变量的类型。没有初始化,没有类型。 auto x = 0;,x 是 intauto x = 0.0;xdoubleauto x = Chainsaw(), xChainsaw

标签: c++ cin auto


【解决方案1】:

您误用了 auto 关键字。 实际使用的类型由在编译时用于初始化变量的值决定。它与在运行时确定要使用的变量类型的能力无关。

例如,如果您编写 auto x = 0,编译器会看到您正在使用 int 初始化变量,并且几乎会将其编译为 int x = 0

根据您要执行的操作,您可能希望将输入作为字符串稍后解析,或者在读取值之前以某种方式确定输入的类型。

【讨论】:

    【解决方案2】:

    使用自动类型声明的对象需要从它们的初始化器中复制它们的静态类型;你的'x'缺少什么。 C++ - 就像 C - 是一种静态类型语言。需要额外的字符串处理来解码输入字符串值。如果可能类型的集合被限制为已知的可数集合,则可以使用适当的 std::variant 来保存该值。

    【讨论】:

    • “不幸的是,C++ - 就像 C 一样 - 是一种静态类型语言” - 我非常不同意这一点。在我看来,C++ 是静态类型的非常好。动态类型语言可能看起来很方便,但往往会在运行时为棘手的类型相关错误打开大门。
    • 没有分歧。只是同情 OP。
    • 恕我直言,答案必须纯属事实。同情之类的东西在那里没有位置。只是事实。
    • 那个词,我刚删了。
    猜你喜欢
    • 2020-05-07
    • 2016-10-23
    • 2011-01-31
    • 2013-04-11
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多