考虑遵循二叉树,其中节点有两个儿子或带有标签的叶子。此代码在 g++ 4.7.2 中编译:
#include <memory>
using namespace std;
struct Tree {
unique_ptr<Tree> left, right;
char label;
Tree(char label) : label(label) {}
Tree(Tree && left, Tree && right) :
left(new Tree(move(left))),
right(new Tree(move(right))) {}
//~ explicit Tree(Tree && left, bool right) {}
} tree {{1, 2}, 3};
当我取消注释显式构造函数时,它无法编译(如果这个显式构造函数是私有的,它也会失败)。这是 gcc 错误,还是显式构造函数禁止对具有相同数量参数的非显式构造函数使用初始化列表构造?
编辑:s/隐式/非显式/。抱歉,我使用“隐式”一词表示“允许隐式转换”,而“显式”一词则表示“用关键字显式标记”。我将编译器自动生成的构造函数称为“默认”,所以我没有注意到“隐式”这个词会如此模棱两可。