"新车"做什么?

Jos*_*eld 22 c++ dynamic-allocation c++11 type-deduction

我用的是什么意思new auto?考虑一下表达式:

new auto(5)
Run Code Online (Sandbox Code Playgroud)

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

Dre*_*ann 29

在这种情况下,auto(5)解决int(5).

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

(所以,它回来了int *)

在得到许可的情况下引用Andy Prowl的足智多谋的答案:

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

如果auto类型说明符出现在类型说明符-SEQ一个的新型-ID类型-ID一个的新的表达,所述 新的表达应包括一个新初始化的形式的

( assignment-expression )
Run Code Online (Sandbox Code Playgroud)

所分配的类型是从新初始化推导如下:设e分配表达新初始化和T是新型-ID类型-ID的的新表达,那么所分配的类型为类型推导出x本发明声明中的变量(7.1.6.4):

T x(e);
Run Code Online (Sandbox Code Playgroud)

[ 例如:

new auto(1); // allocated type is int
auto x = new auto(’a’); // allocated type is char, x is of type char*
Run Code Online (Sandbox Code Playgroud)

- 结束例子 ]

  • 扔标准报价说明为什么,我会接受.:P (3认同)
  • @AndyProwl我喜欢你的风格,Dude. (3认同)
  • 虽然我没有复制它,但我现在意识到在我发布我的答案之前,相关的标准参考出现在评论中.所以我认为"偷"它在技术上是公平的;) (2认同)

And*_*owl 13

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

如果auto类型说明符出现在类型说明符-SEQ一个的新型-ID类型-ID一个的新的表达,所述 新的表达应包括一个新初始化的形式的

( assignment-expression )
Run Code Online (Sandbox Code Playgroud)

所分配的类型是从新初始化推导如下:设e分配表达新初始化和T是新型-ID类型-ID的的新表达,那么所分配的类型为类型推导出x本发明声明中的变量(7.1.6.4):

T x(e);
Run Code Online (Sandbox Code Playgroud)

[ 例如:

new auto(1); // allocated type is int
auto x = new auto(’a’); // allocated type is char, x is of type char*
Run Code Online (Sandbox Code Playgroud)

- 结束例子 ]

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

auto x(5)
Run Code Online (Sandbox Code Playgroud)

这是int.

  • 当我搜索"新车"时,理智检查我在网上的答案是*毫无价值的...... (4认同)
  • @DrewDormann:但你先给出了正确答案,做得好;) (3认同)