gpt4 book ai didi

c++ - 有没有办法消除构造函数选择的歧义?

转载 作者:行者123 更新时间:2023-12-02 05:32:55 25 4
gpt4 key购买 nike

我有一个像这样的小代码:

class A {
public:
A() {
std::cout << "ctor\n";
}

A(int i = 5) {
std::cout << "ctor -> v\n";
}

virtual ~A() {
std::cout << "dtor\n";
}
};

int main() {
A a;
}

很明显,这段代码无法编译,因为 A 的构造函数不明确。我想知道是否有办法通过手动选择要调用的构造函数来消除此代码的歧义。我不想传递默认值来消除函数调用的歧义(这是一种显而易见的方法)。我只是想知道还有没有其他办法。

最佳答案

在不更改构造函数定义的情况下,标准 C++ 中无法消除调用的歧义。

消除歧义的选项是删除默认参数,或向第一个构造函数添加“虚拟”标记参数。

constexpr struct default_tag_t{} default_tag{};
///
A(default_tag_t) {
std::cout << "ctor\n";
}

这使得第一个构造函数可以唯一调用

A a(default_tag);

关于c++ - 有没有办法消除构造函数选择的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59465834/

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