具有多字基本类型的“auto”变量声明会导致错误

A-n*_*n-y 4 c++ auto c++11

是否可以使用 auto 关键字和由两个或多个单词组成的类型名称来声明变量?

如果没有,为什么不呢?

例如

auto foo = unsigned int{0};

给出以下编译器输出

铛:

error: expected '(' for function-style cast or type construction

海湾合作委员会:

error: expected primary-expression before 'unsigned'

R S*_*ahu 6

为了

auto foo = T{0};
Run Code Online (Sandbox Code Playgroud)

要工作,T必须是一个简单类型说明符

来自C++11 标准/5.2.3 显式类型转换(函数表示法)/3

类似地,简单类型说明符类型名称说明符后跟花括号初始化列表会创建指定类型的临时对象 direct-list-initialized ( [dcl.init.list] ) 以及指定的花括号初始化列表,其值是作为纯右值的临时对象。

如果您看到simple-type-specifier的定义,unsigned int则不是其中之一。

您可以使用以下任意一种:

auto foo = 0U;
auto foo = (unsigned int)0;
auto foo = static_cast<unsigned int>(0);
Run Code Online (Sandbox Code Playgroud)