【问题标题】:What does `new auto` do?`new auto` 有什么作用?
【发布时间】:2013-04-02 20:08:36
【问题描述】:

当我使用new auto 是什么意思?考虑表达式:

new auto(5)

动态分配对象的类型是什么?它返回的指针是什么类型的?

【问题讨论】:

  • 我在任何地方都找不到这个问题,所以我想我会问的。
  • Gcc 说它是int
  • C++11 5.3.4/2,它是int
  • 请不要在你的公开提交中这样做,我手上已经有足够多奇怪的 C++ 代码了:(

标签: c++ c++11 dynamic-allocation type-deduction


【解决方案1】:

在这种情况下,auto(5) 解析为 int(5)

您正在从堆中分配一个新的int,初始化为5

(所以,它返回一个int *

经许可引用 Andy Prowl 的足智多谋的回答:

根据 C++11 标准的第 5.3.4/2 段:

如果 auto 类型说明符出现在 new-type-idtype-idtype-specifier-seq 中> 的新表达式new-expression 应该包含一个 new-initializer 的形式

( assignment-expression )

分配的类型是从 new-initializer 推导出来的:让e 成为 assignment-expression in new-initializer 和 T 是 new-expressionnew-type-idtype-id , 那么分配的类型就是类型 在发明声明(7.1.6.4)中推导出变量x

T x(e);

[例子

new auto(1); // allocated type is int
auto x = new auto(’a’); // allocated type is char, x is of type char*

结束示例 ]

【讨论】:

  • 加入标准报价,说明原因,我会接受。 :P
  • @sftrabbit 谢谢,但此时我只会窃取 Andy Prowl 的作品。
  • @ulidtko 除了 Andy 和/或 Xeo。我认为德鲁有道德!
  • 虽然我没有复制它,但我现在意识到,在我发布答案之前,相关的标准参考已经出现在 cmets 中。所以我认为“偷”它在技术上是公平的;)
  • @AndyProwl 我喜欢你的风格,伙计。
【解决方案2】:

根据 C++11 标准的第 5.3.4/2 段:

如果auto 类型说明符出现在new-type-idtype-idtype-specifier-seq 中> 的新表达式new-expression 应包含一个 new-initializer 的形式

( assignment-expression )

分配的类型由 new-initializer 推导出如下:让e 成为 assignment-expression new-initializer 和 T 是 new-expressionnew-type-idtype-id , 那么分配的类型就是类型 在发明声明(7.1.6.4)中推导出变量x

T x(e);

[例子

new auto(1); // allocated type is int
auto x = new auto(’a’); // allocated type is char, x is of type char*

结束示例 ]

因此,分配对象的类型与发明声明的推断类型相同:

auto x(5)

这是int

【讨论】:

  • 你打败了我找到参考,公平公正。 +1 :)
  • @DrewDormann:但你先给出了正确答案,干得好;)
  • 当我搜索“新汽车”时,在网上检查我的答案是毫无价值...
  • 这不是一文不值。汽车经销商加盟委员会。这是 ISO-C++ 的主要收入来源
猜你喜欢
  • 1970-01-01
  • 2011-11-23
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多