【问题标题】:What precedence are types derived when using auto?使用 auto 时派生的类型有什么优先级?
【发布时间】:2014-11-17 16:08:56
【问题描述】:

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

自动 x = 12.5;

这会导致浮点数还是双精度数?它是否有任何理由在速度、效率或尺寸方面选择另一种?类型的派生顺序是什么?它是先尝试 int 然后 double 然后 string 还是不是那么简单?

谢谢

【问题讨论】:

  • 文字12.5的类型是double,所以xdouble
  • 所有文字都是明确的。 12.5double12.5ffloat
  • 自动选择与模板类型推导为 T 所做的相同类型。
  • 您的问题是否仅涉及文字?
  • @PiPatrol 除了花括号初始化列表是的,应用与模板参数推导相同的规则

标签: c++ type-conversion auto


【解决方案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*

【讨论】:

  • "foo" //char const []auto 的推导类型是const char*,因为它会衰减
  • @PiotrS。我将添加一个注释,auto 将数组衰减为指针,但字面量本身的类型是数组。
  • 准确来说,字面量的类型是char const [4]char const [] 是不同的类型。
  • @T.C.感谢您的更正,我编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多