Is_copy_assignable()在定义拷贝赋值时返回false
is_copy_assignable() returns false when copy assignment defined
为什么is_copy_assignable()
在这里返回false (g++ 4.8.2):
#include <iostream>
#include <utility>
#include <type_traits>
using namespace std;
class thing {
public:
int n;
thing () : n(1) { }
thing (thing& x) : n(x.n) { }
thing& operator= (thing& x) {
n = x.n;
return *this;
}
};
using namespace std;
int main (void) {
cout << is_copy_assignable<thing>::value << endl;
return 0;
}
std::is_copy_assignable<T>
在§20.9.4.3 [meta.unary]中有正式定义。道具]作为std::is_assignable<T &, const T &>
。
现在这(std::is_assignable<T, U>
)反过来要求declval<T>() = declval<U>();
是良构的。对于你的类,它不是,因为你的复制赋值操作符只接受一个非const的T &
,所以它不能被赋值一个const T
。
另一种查看方式,参见cppreference的CopyAssignable
页面。
因为复制赋值操作符的期望签名是:
thing& operator= (const thing& x) // note the const parameter
返回true
。
演示。
查看CopyAssignable的要求(is_copy_assignable
要求),const T
必须是可分配的
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 拷贝赋值操作出现分段错误
- 如何避免拷贝赋值操作符的双重自由或损坏(fasttop)
- Is_copy_assignable()在定义拷贝赋值时返回false
- 在拷贝赋值期间c++字符串容量变化
- 返回值函数中结构成员赋值的额外拷贝
- VS 2015更新3删除拷贝赋值操作符错误
- 如何编写一个拷贝赋值操作符来处理引用