gpt4 book ai didi

C++ 值构造函数

转载 作者:可可西里 更新时间:2023-11-01 18:36:41 25 4
gpt4 key购买 nike

假设我有以下(无效)代码:

struct A {
A(A) {};
};

MSVC 给我:

error C2652: 'A' : illegal copy constructor: first parameter must not be a 'A' 

为什么编译器将其检测为复制构造函数,而不是常规构造函数?

C++ 标准第 12.8.2 章说:

A non-template constructor for class X is a copy constructor if its first parameter is of type X& , const X& , volatile X& or const volatile X&

我希望编译器将上述方法检测为常规构造函数,就像

struct A {
A(B) {};
};

而 B 是另一个类。

这个行为是在哪里定义的?

最佳答案

N4140 [class.copy]/6

A declaration of a constructor for a class X is ill-formed if its first parameter is of type (optionally cv-qualified) X and either there are no other parameters or else all other parameters have default arguments.

关于C++ 值构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41184852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com