最小的例子是这样的类:
class Chain {
public:
Chain(std::string name, std::vector<int> args)
{
assert(true);
}
Chain(std::string name, bool flag)
{
assert(false);
}
};
这样的用法
int main() {
auto ch = Chain("name", {});
return 1;
}
Chain
的第二个构造函数之前没有 bool 标志
,我必须添加它,现在代码 Chain("name", { })
调用第二个构造函数(在调用第一个构造函数之前)。
我想我会改变第二个构造函数的参数顺序
Chain(bool flag, std::string name)
{
assert(false);
}
但即便如此,它也会将 const char *
转换为 bool
并将 {}
转换为 std::string
然后调用第一个构造函数。
有没有办法禁止它/强制使用调用第一个ctor?
最佳答案
使用显式类型。
auto ch1 = Chain("name", std::vector<int>{});
auto ch2 = Chain("name", true);
关于C++ 大括号初始值设定项作为参数调用与预期不同的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58191588/