【发布时间】:2014-08-31 07:00:48
【问题描述】:
这是我的代码,我禁用了复制构造函数,但它也禁用了其他类型的隐式复制。在这种情况下有什么解决方法吗?
测试于:g++ (GCC) 4.7.1
struct item {
int b;
};
class test {
public:
test(const test& copy) = delete;
test(const item& a) {
std::cout << "OK " << a.b << std::endl;
}
};
int main() {
test a = item{10}; //error: use of deleted function ‘test::test(const test&)’
}
【问题讨论】:
-
如果可以的话,给
test一个移动构造函数,如果不能的话,使用直接初始化语法。 -
您使用的是哪个编译器和版本?
-
@IanCook:添加版本
-
奇怪的是 gcc 和 clang 都给出了错误,但 MSVC2013 编译它很好。我不太了解标准,不知道哪个是正确的。
-
@Ian 我很确定这是一个 MSVC 扩展。
标签: c++ class c++11 copy-constructor