从 C++11 之前的代码调用 C++11 库时移动语义

Move semantics when calling a C++11 library from pre-C++11 code

假设您使用 class MyClass 创建了一个库,该库具有适当的移动赋值运算符和移动构造函数。此外,该库已正确定义和实现 MyClass MyClass::operator + (const MyClass& other)。这个 class 是用 -std=c++11 编译的,以便这些运算符和像 MyClass&& 这样的语法有意义。

如果您稍后有一个程序 not 使用此库使用 -std=c++11 编译并创建 class MyClass 的实例,您会吗能够利用移动语义?

也就是说,下面会调用MyClass的move构造函数吗?

MyClass first, second;
// initialize first and second
MyClass moved = first + second; // hopefully uses move semantics

我知道这段代码无法创建自己的 class 并使用像 MyClass&& 这样的语法而不会出现编译错误,但希望它仍然能够通过以下方式利用 C++11使用 C++11 库...

感谢您的澄清。

C++03 和 C++11 的 ABI 没有区别,所以 object 文件不是问题。您的库可以在内部尽可能多地使用 C++11,但是使用 C++11 语法的 headers 不能用于 C++03 项目,编译器会抛出错误。

库单独编译的内部实现细节可能会使用移动语义。 header 和调用者可能不会使用移动语义,因为它们不受支持。