C++中auto关键字如何推导类型

yoy*_*768 0 c++ variables types keyword

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

#include <iostream>

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

Swi*_*Pie 5

它的工作方式与模板表达式返回类型的推导相同。它发生在编译类型,因此它是静态类型。

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

 decltype(5433245244524) a = 5433245244524;
Run Code Online (Sandbox Code Playgroud)

auto关键词的意义远不止于此。它是一个占位符类型。例如在声明中

 const auto& a = 5433245244524;
Run Code Online (Sandbox Code Playgroud)

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

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