gpt4 book ai didi

c++ - Visual Studio 给出了关于模棱两可的 ctor 的错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:21 25 4
gpt4 key购买 nike

我在 VS 2013 中遇到了编译器错误,我的自定义类存在歧义错误,但它可以正常工作 std::vector

#include <initializer_list>
#include <vector>

using namespace std;

class MyArray
{
public:
std::vector< int > values;
MyArray(int s) : values(s) { }
MyArray(std::initializer_list< int >list) { values = list; }
};

int main ()
{
vector<int> vx({9,8,7}); // Works
MyArray mx({9, 8, 7}); // Works

vector<int> vy({9}); // Works
MyArray my({9}); // VS-compiler complains about ambiguity
MyArray mz(std::initializer_list<int>{9}); // Works
}

当然,我可以通过显式添加类型来解决歧义:MyArray my(std::initializer_list<int>{9}) ,但是这样很不方便。 有没有一种方法可以对构造函数进行编码,以便 VS 不会提示我的类存在歧义?

std::vector不会出现歧义错误,这似乎应该是可能的。

最佳答案

看来是MS VC++ 2013编译器的bug。

根据 C++ 标准(13.3.1.7 通过列表初始化进行初始化,p.#1)

— Initially, the candidate functions are the initializer-list constructors (8.5.4) of the class T and the argument list consists of the initializer list as a single argument.

— If no viable initializer-list constructor is found, overload resolution is performed again, where the candidate functions are all the constructors of the class T and the argument list consists of the elements of the initializer list.

因为在您的类中找到了这样的构造函数,所以应该调用它。

至少这段代码是用 GCC 编译的。

您可以向 Microsoft 编写缺陷报告。通常他们会建议一种解决问题的方法。不要忘记测试项目的 MS 语言扩展代码。

关于c++ - Visual Studio 给出了关于模棱两可的 ctor 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25088827/

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