如何在C ++中解析“ auto a(b);”?

Apo*_*ica 6 c++

我遇到了以下形式的奇怪代码:

// Given the following definitions:
class B;
B b;

// Line of interest:
auto a(b);
Run Code Online (Sandbox Code Playgroud)

我以为它一定是拼写错误,但是经过一些实验发现它是可行的,并且似乎总是调用type的copy构造函数b(即使您有其他也可以具有匹配构造函数的类,即使您另外删除类型为的复制构造函数b

我不知道这样一条语句的技术名称,所以我不确定如何在cppreference或StackOverflow中搜索它。编译器通常如何解析这种类型的语句,它在哪里记录?

-

回复:重复标记。我看不出他们如何解决这个问题。我已经知道auto使用模板类型推导,在这种情况下并不能说明任何事情。

eer*_*ika 6

如何auto a(b);在C ++中解析?

取决于是什么b。如果b是类型,则这是函数的声明,其名称a带有推导的返回类型和type的单个参数b

如果b不是类型,则通过名称定义变量,该名称a的类型由初始化程序推导出。

它在哪里记录?

权威文档是标准文档。标准部分[dcl.type.auto],[dcl.ambig.res],[dcl.fct],[dcl.init]应该相关。

也有网站以(可以说)更平易近人的方式提供文档。

最近的C ++入门书籍(也包括2011年以来的内容)也应涵盖这一点。

即使您另外删除了以下类型的复制构造函数 b

我对此表示怀疑。创建一个mcve