【问题标题】:How does the auto keyword deduct the type in C++C++中auto关键字如何扣除类型
【发布时间】:2021-12-19 11:29:16
【问题描述】:

我想知道 auto 关键字如何确定 c++ 中变量的类型。我认为静态类型语言无法做到这一点。 例如,这是如何工作的:

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
    auto a = 5433245244524;
    std::cout << a << std::endl;
}

【问题讨论】:

  • C++ 标准中的规则。检查例如cppreference.com。如果您告诉我们上面不清楚的内容也会有所帮助,例如它的作用与您的预期。
  • @UlrichEckhardt 我只是想知道为什么会这样。我试图了解“幕后”的行为。
  • @Aconcagua 从 C++11 开始,未指定的后缀基数为 10 的数字如果不适合 int,将被提升为 longlong long
  • @Aconcagua 十进制整数文字的类型将是intlonglong long 中最小的拟合。

标签: c++ variables types keyword


【解决方案1】:

它的工作方式与推断模板的表达式返回类型相同。它发生在编译类型,所以它是一个静态类型。

文字5433245244524 包含初始化表达式。您可以使用运算符decltype() 在编译时获取表达式的类型(静态类型)。例如

 decltype(5433245244524) a = 5433245244524;

autokeyword 不止于此。这是一个占位符类型。例如。在声明中

 const auto& a = 5433245244524;

这里auto 替换不带限定符的类型标识符以形成兼容的引用类型。

关键字auto 还有许多其他用途,例如函数的尾随返回类型等见https://en.cppreference.com/w/cpp/language/auto

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    相关资源
    最近更新 更多