比方说,在 C++11 中,我做
auto a = 4;
a
是什么?一个int
(我经常读到),一个unsigned int
,一个short
,一个long
,一个size_t
,一个 char
? auto
的行为是否始终被定义,它在每个编译器和每个体系结构上是否始终是完全相同的类型(具有完全相同的位长度!)?
另一个例子:
class A{};
class B:A{};
auto x = new B();
x
是 *B
类型还是 *A
类型?在每个编译器和平台上始终相同?两者都是完全合法的,编译器如何知道我想要哪一个?
是否有auto
行为的确切列表?
最佳答案
What will
a
be?
int
,因为它是 4
的类型。
Will
x
be of type*B
or of type*A
?
B*
,因为这是 new B()
的类型。
Is there an exact list of the
auto
behaviour?
通常是初始化器的类型;除非那是引用类型,在这种情况下它是基础对象类型。如评论中所述,对于数组等不寻常的类型还有一些其他问题。
will it always be the exact same type (with the exact same bit length!) on each compiler and each architecture?
在大多数情况下,初始化器有一个明确定义的类型,它决定了 auto
推导的类型。
如果初始化器是整数文字,则类型可能取决于平台;例如,1000000
在 32 位平台上可能是 int
,但在 16 位平台上可能是 long
。
关于c++ - C++11 auto 关键字是否针对所有情况进行了准确定义?或者 : how does auto know what I intend?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23411651/