c++ - C++11 auto 关键字是否针对所有情况进行了准确定义?或者 : how does auto know what I intend?

标签 c++ auto

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

auto a = 4;

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

另一个例子:

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/

相关文章:

c++ - `auto` 多词基本类型的变量声明导致错误

c++ - C++11 中的 decltype(auto) - 推导返回类型

c++ - 在菜单中放置登录功能 (C++)

c++ - 在cppcms GET或POST请求中显示参数

C++复制构造函数的奇怪之处

c++ - 遍历动态 vector 时 auto 的异常行为

c++ - auto 推导的那个类型是什么?

c++ - 如何在 C++ 中使用数组演示内存错误

c++ - 如何使用 Sublime Text 2 编译 gtkmm/gtk 程序

c++ - C++11 自动类型危险吗?