使用auto时派生的类型有什么优先级?

时间:2014-11-12 15:27:15

标签: c++ type-conversion auto

我想知道在C ++中使用auto时派生的类型的顺序是什么?例如,如果我有

  

自动x = 12.5;

这会导致浮动还是双重?在速度,效率或尺寸方面,它是否有任何理由选择其中一种?这些类型的派生顺序是什么?它是尝试int然后加倍然后字符串或是不是那么简单?

由于

1 个答案:

答案 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*