显式删除构造函数 - 这有关系吗?

问题描述 投票:0回答:1

将构造函数标记为已删除时,即

class MyClass {

   // ... 

   MyClass(int x) = delete;

   // ... 

};

将删除的构造函数标记为

explicit
有什么影响吗?即

   explicit MyClass(int x) = delete;

c++ explicit object-construction
1个回答
0
投票

是的,

= delete
不影响重载解析。
explicit
确实会影响在不同的重载解决场景中是否考虑重载。

示例:

struct MyClass {
    MyClass(int x) = delete;
    MyClass(long x) { };
};

如果第一个构造函数上没有

explicit
,则
MyClass x = 0;
的格式不正确,因为重载解析会更喜欢第一个构造函数。对于
explicit
,第一个构造函数不被考虑用于复制初始化,而选择第二个构造函数(否则匹配会更差)。初始化不会格式错误。

删除构造函数意味着您想要导致特定的重载解析结果,从而使构造函数格式错误。在决定要采用哪种格式错误时,您始终必须考虑是否应应用

explicit
,就像定义非删除重载时一样。

© www.soinside.com 2019 - 2024. All rights reserved.