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。。。