我想知道在C ++中使用auto时派生的类型的顺序是什么?例如,如果我有
自动x = 12.5;
这会导致浮动还是双重?在速度,效率或尺寸方面,它是否有任何理由选择其中一种?这些类型的派生顺序是什么?它是尝试int然后加倍然后字符串或是不是那么简单?
由于
答案 0 :(得分:1)
虽然C ++允许使用相同类型的文字初始化不同类型的变量,但C ++中的所有文字都具有一个特定类型。因此,auto
变量的类型推导对于使用文字初始化不需要特殊,它只需要右侧的类型(在您的情况下,单个,明确的文字类型)并将其应用于变量。
文字及其不同类型的例子:
12.5 //double
12.5f //float
13 //int
13u //unsigned int
13l //long
13ull //unsigned long long
"foo" //char const [4]
'f' //char
那么float f = 12.5;
呢?非常简单:此处float f
初始化为类型为double
的文字,并进行隐式转换。 12.5
为自己从不是float
,它始终是double
。
auto
变量不的类型具有文字类型的异常是当数组到指针衰减发生时,所有字符串文字的情况都是如此:
auto c = "bar"; //c has type char const*, while "bar" has type char const[4]
但这对于文字来说并不特别,但适用于各种数组:
int iarr[5] = {};
auto x = iarr; //x has type int*