这是编译器启动画面(用于版本等):
C:\Program Files\Microsoft Visual Studio 10.0\VC>cl.exe
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
我有一个基类(这是一个模板),想象它是:
template <typename T>
class Base {
public:
Base<T> & operator = (const Base<T> &);
Base<T> & operator = (Base<T> &&);
};
然后我有一个派生类,它不会operator =
以任何方式重新实现。
如果我执行以下操作:
Derived<int> derived;
derived=Derived<int>();
在operator =
第二行调用接受左值的。
如果我进入定义Derived<T>
并添加以下内容:
template <typename T>
Derived<T> & Derived<T>::operator = (Derived<T> && other) {
Base<T>::operator=(static_cast<Base<T> &&>(other));
return *this;
}
operator =
接受右值的 被调用。
即使我还实现了operator =
which 采用左值(以几乎相同的方式),这种行为仍然存在。
因为没有更好的短语:什么给了?
我是否误解了 C++ 或者这不是它应该如何工作的?