如果我使用带有原始文字的auto声明的变量初始化,则结果是定义的,例如:
auto i = 6; // Is this always going to evaluate to a int?
// Or could it evaluate to some similar type like short?
答案 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
,而不是short
或long
。