是否为所有情况准确定义了C++ 11 auto关键字?或者:汽车如何知道我的意图?

Foo*_*Bar 2 c++ auto

比方说,在C++ 11中,我做到了

auto a = 4;
Run Code Online (Sandbox Code Playgroud)

a是什么?的int(因为我经常读),一个unsigned int,一个short,一个long,一个size_t,一个char?是否auto始终定义了行为,它是否始终是每个编译器和每个体系结构上完全相同的类型(具有完全相同的位长!)?

另一个例子:

class A{};
class B:A{};
auto x = new B();
Run Code Online (Sandbox Code Playgroud)

会不会x是类型*B或类型的*A?每个编译器和平台上始终相同?两者都是完全合法的,编译器如何知道我打算使用哪一个?

是否有auto行为的确切列表?

Mik*_*our 10

a是什么?

int,因为那是那种类型4.

会不会x是类型*B或类型的*A

B*,因为那是那种类型new B().

是否有auto行为的确切列表?

通常,它是初始化器的类型; 除非这是一个引用类型,在这种情况下它是底层对象类型.如评论中所提到的,对于像阵列这样的不寻常类型还有一些其他皱纹.

在每个编译器和每个架构上它总是完全相同的类型(具有完全相同的位长!)?

在大多数情况下,初始化程序具有明确定义的类型,并确定由此推导出的类型auto.

如果初始化器是整数文字,那么类型可能取决于平台; 例如,1000000可能int在32位平台上,但long在16位平台上.