C++ 为什么Visual Studio没有进入我的作业操作符?
我正在努力牢牢掌握移动和复制构造函数和任务 我有以下简单的模板类:C++ 为什么Visual Studio没有进入我的作业操作符?,c++,assignment-operator,C++,Assignment Operator,我正在努力牢牢掌握移动和复制构造函数和任务 我有以下简单的模板类: template<typename T> class Box { public: // Copy constructor explicit Box(const T& val) { value = val; } // Move constructor explicit Box(const T&& val) { val
template<typename T>
class Box {
public:
// Copy constructor
explicit Box(const T& val) {
value = val;
}
// Move constructor
explicit Box(const T&& val) {
value = val;
}
// Set and get value
void set(T val) { value = val; }
T get() { return value; }
// Copy assignment operator
T& operator=(const T& val) {
value = val;
}
// Move assignment operator
T& operator=(const T&& val) {
value = val;
}
private:
T value;
};
由以下代码使用:
int main() {
Box<int> iBox{ 1 };
int j = 5;
Box<int> jBox{ j };
iBox = jBox;
return 0;
}
如果我的代码是正确的,我希望当我进入iBox=jBox时,我应该进入一个赋值重载。为什么不发生这种情况?您尚未声明赋值运算符,该运算符采用Box类型的右侧操作数,因此编译器除了使用生成的默认赋值运算符外,别无选择 顺便说一下,赋值运算符中也没有返回语句 也许你想写:
Box& operator=(const Box& other) {
value = other.value;
return *this;
}
Box& operator=(Box&& val) {
value = other.value;
return *this;
}
请注意,对const的右值引用没有什么意义。您没有声明赋值运算符使用Box类型的右操作数,因此编译器除了使用生成的默认赋值运算符之外别无选择 顺便说一下,赋值运算符中也没有返回语句 也许你想写:
Box& operator=(const Box& other) {
value = other.value;
return *this;
}
Box& operator=(Box&& val) {
value = other.value;
return *this;
}
请注意,对const的右值引用毫无意义。请在调试选项中查找“仅启用我的代码”。或者,禁用优化是否禁用内联以进行调试?否则,函数可能不会被调用,而是就地执行。@sehe,Tools | Options | debug | General | Enable Just My Code无效@king|u nak,项目属性| C/C++|优化|内联函数扩展没有效果,假设我在摆弄正确的选项。。。和优化已在同一位置关闭。请在“调试选项”中查找“仅启用我的代码”。或者,禁用优化是否禁用内联以进行调试?否则,函数可能不会被调用,而是就地执行。@sehe,Tools | Options | debug | General | Enable Just My Code无效@king|u nak,项目属性| C/C++|优化|内联函数扩展没有效果,假设我在摆弄正确的选项。。。优化已经在同一个地方停止了。是的,我刚刚注意到我代码中的这个缺陷。操作符的类型应该是Box而不是T…是的,我刚刚注意到我代码中的这个缺陷。运算符的类型应为Box而不是T。。。