使用自动声明变量并使用原始文字定义的行为进行初始化?

时间:2016-10-21 19:00:53

标签: c++ c++11

如果我使用带有原始文字的auto声明的变量初始化,则结果是定义的,例如:

auto i = 6; // Is this always going to evaluate to a int?
            // Or could it evaluate to some similar type like short?

3 个答案:

答案 0 :(得分:5)

整数文字6的类型是 int ,因为您可以检查here

然后,从cppreference.com

  

对于变量, auto 指定正在变量的类型   声明将从其初始化程序中自动推断出来。

因此i的类型为 int ,因为6的类型为 int

这种行为绝对定义明确。

答案 1 :(得分:2)

是的,这正是auto的用途。

例如,auto i;没有意义。编译器使用6来推断类型。 6是一个整数文字。

答案 2 :(得分:1)

是的,因为每个文字都有明确定义的类型。文字6的类型是int。因此,您的auto将被翻译为int

如果int长度为16或32位,则实现已定义,但这不会产生未定义的行为,因为程序中的每个简单int都具有相同的长度。除此之外,无论根据您的架构int的长度如何,6都是int,而不是shortlong