初始值设定项列表构造函数导致右值构造函数不明确
initializer-list constructor causing ambiguity with rvalue constructor
我在Visual Studio C++11中尝试使用初始值设定项列表时遇到错误,如下代码所示
template <typename T>
struct TestArray
{
TestArray(std::initializer_list<T> list) {}
TestArray(TestArray<T> &&rval) {} // This causes an error
};
struct TestPair
{
TestPair(int a, int b) {}
};
当我申报时:
TestArray<TestPair> blah({ { 1, 2 } });
我得到错误:
Cannot convert from 'initializer-list' to 'TestArray<TestPair>'
No constructor could take the source type, or constructor overload resolution was ambiguous
如果我删除右值构造函数,它就可以正常工作。为什么这里的初始值设定项列表和右值构造函数之间存在某种歧义?
您的测试是错误的,您不应该有外部()
,更像:
TestArray<TestPair> blah{{1, 2}};
相关文章:
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- C++ - 空模板类构造函数不初始化值
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 将参数传递给泛型 lambda 时复制构造函数不正确
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- 为什么继承的受保护构造函数不能公开?
- 为什么原始卷曲构造函数 {} 不返回右值?
- 为什么std::atomic的默认构造函数不默认初始化底层存储值
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 如果普通默认构造函数不执行任何操作,为什么我们不能使用 malloc 创建平凡可构造的对象?
- 子类化 STL 容器:范围构造函数不起作用
- 带有此指针的模板类多重继承构造函数不起作用?
- C++默认复制构造函数不可行
- 构造函数不会将使用 new 初始化的数组作为参数
- 按值将对象传递给 SubClass 构造函数,导致超类的构造函数不调用
- 为什么 std::map 的移动构造函数不是 noexcept?
- 使用 "()" 调用构造函数不同于"{}"
- 构造函数不明确
- C++:构造函数不明确
- 初始值设定项列表构造函数导致右值构造函数不明确