axi*_*mar 3 templates variable-assignment c++11
我有以下代码:
#include <iostream>
using namespace std;
template <class T> class Foo {
public:
template <class U> void operator = (const U &u) {
cout << "generic copy assigment\n";
}
void operator = (const Foo<T> &f) {
cout << "specific copy assigment\n";
}
template <class U> void operator = (U &&u) {
cout << "generic move assigment\n";
}
void operator = (Foo<T> &&f) {
cout << "specific move assigment\n";
}
};
int main() {
Foo<int> i, j;
i = j;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果运行,它会打印"通用移动分配",即编译器更喜欢移动副本.但是,如果我注释掉两个移动作业:
template <class T> class Foo {
public:
template <class U> void operator = (const U &u) {
cout << "generic copy assigment\n";
}
void operator = (const Foo<T> &f) {
cout << "specific copy assigment\n";
}
};
Run Code Online (Sandbox Code Playgroud)
输出是"特定的拷贝分配".
换句话说,当类启用移动时,将选择通用移动而不是特定移动,而如果类不启用移动,则选择特定副本而不是通用移动.
它是Visual Studio 2010的错误还是在c ++ 0x规范中定义的这种行为?
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |