使用“自动”时派生的类型的优先级是什么? 我想知道在C++中使用AutoCo时派生的类型是什么顺序?例如,如果我有

使用“自动”时派生的类型的优先级是什么? 我想知道在C++中使用AutoCo时派生的类型是什么顺序?例如,如果我有,c++,type-conversion,auto,C++,Type Conversion,Auto,自动x=12.5 这会导致浮动还是双倍?在速度、效率或规模方面,是否有任何理由选择其中一个?类型的派生顺序是什么?它是尝试int然后double然后string,还是不是那么简单 谢谢< P>而C++允许用相同的文字类型初始化不同类型的变量,C++中的所有文字都有一种特定类型。因此,auto变量的类型推断不需要特别用于文本的初始化,它只需要获取右侧的类型(在您的情况下是文本的单一、明确的类型)并将其应用于变量。 文字及其不同类型的示例: 12.5 //double 12.5f //floa

自动x=12.5

这会导致浮动还是双倍?在速度、效率或规模方面,是否有任何理由选择其中一个?类型的派生顺序是什么?它是尝试int然后double然后string,还是不是那么简单


谢谢

< P>而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?非常简单:这里用类型为
double
的文本初始化
float f
,并进行隐式转换
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*

文本
12.5
的类型是
double
,因此
x
double
。所有文本都是明确的
12.5
是一个
double
12.5f
是一个
float
。自动选择模板类型推断只为
T
所做的相同类型。您的问题是否只涉及文本?@PiPatrol除了括号内的init列表是,同样的规则适用于模板参数推断
“foo”//char const[]
auto
的推导类型为
const char*
,如下所示decayed@PiotrS. 我要补充一点,
auto
将数组衰减为指针,但文字本身的类型是数组。确切地说,文字的类型是
char const[4]
char const[]
是另一种类型。@T.C.坦斯克为了更正,我编辑了我的答案。