C++ 大括号初始值设定项作为参数调用与预期不同的构造函数

标签 c++

最小的例子是这样的类:

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/

相关文章:

C++ : error LNK2019: unresolved external symbol

c++ - 在 C++ 中是否可以强制显式向上转换

c++ - 近正弦数据下界的(线性或多项式)回归算法

c++ - 如何在c++中的文件处理中删除文件

c++ - 如何打印std::vector <>::size_type?

c++ - 访问其他类变量的最佳方法

c++ - 在 Visual Studio 2013 中运行程序时出错

c++ - 使用 C++ (Windows) 在新窗口中启动 URL

c# - 我如何使用像 C# 这样的 C++ 枚举类型?

c++ - 使用 SWIG (AIX 5.1) 从 Perl 调用 C++ 库时崩溃