如何保护 C++03 和 C++11 的移动构造函数
How to guard move constructors for C++03 and C++11?
这类似于在运行时可以检测到 C++03 和 C++11 之间的哪些差异(如果有的话)?。但在这种情况下,我希望通过预处理器进行检测。
当在 C++03 和 C++11 中使用源时,我们应该如何保护移动构造函数(和移动赋值)?
以下内容是否足够(移动语义是否是C++所有编译器都采用的东西,因为它是必不可少的/核心功能)?
#if (__cpluplus >= 201103L)
Foo(Foo&& other);
#endif
还是我需要了解编译器的细节?如果我们需要特定于编译器的宏,那么如何处理像Visual Studio 2012 __cplusplus和C++ 11这样的情况?
很抱歉问。我没有一些编译器可以测试,比如Visual Studio 2012,Intel ICC和Comeau。
编辑:该库使用 GNUmakefile 和标准 C++ 03。它不使用Autotools,不使用Cmake,也不使用Boost。
Move 语义是核心C++11 新功能之一(在某些方面,它是新标准的原因之一),因此对于任何符合标准的编译器来说,它应该足够:
#if (__cpluplus >= 201103L)
....
#endif
同上,比如说,像可变参数和汽车的新语义一样"必不可少"的东西。
当然,一旦你进入编译器细节的领域,比如一个损坏的编译器,或者如果你想让移动语义在提供"C++0x"或仿真模式而不是真实的东西的编译器中工作,那么......好吧,你进入了编译器细节的领域。对于其中的一个很好的子集,你甚至不需要采用任何外部库(无论是Boost,cxxomfort等),而只需复制和调整Predef Wiki中的相关宏和测试。
相关文章:
- C 11移动无效
- C 11移动语义
- C 11移动构造函数未调用,默认构造函数首选
- 如何使用C 11移动语义以明确避免复制
- C++ 11 - 移动非局部变量是否安全
- c++11移动std::deque或std::list的插入
- 如何使用 C++11 移动语义从函数返回 std::vector
- C++11移动语义
- RVO和NRVO优化+C++11移动操作员
- C++11移动构造函数和赋值运算符
- 编辑 Google 的 C++ DISALLOW_COPY_AND_ASSIGN 预处理器宏以进行 C++11 移动语义
- DirectX 11 移动我的正方形
- C++11 移动构造函数的速度比 C++98 复制构造函数慢
- C++11 移动构造函数
- C++:在共享所有权的情况下,C++11移动语义可以避免指针吗
- 初始化数组时,我可以避免c++11移动吗
- 返回锁时C++11移动
- C++11:移动/复制构造不明确
- C++11移动语义是在做一些新的事情,还是只是让语义更清晰
- 需要一些帮助来理解c++ 11移动构造函数