如何防范C 03和C 11的构造函数?
这类似于
What differences,if any,between C++03 and C++11 can be detected at run-time?.但在这种情况下,我希望通过预处理器进行检测.
当在C 03和C 11中使用源时,我们应该如何保护move constructor(和move assignment)? 以下是否足够(由于它是必不可少的核心功能,所有C编译器都采用了move semantics)? #if (__cpluplus >= 201103L) Foo(Foo&& other); #endif 或者我是否需要了解编译器细节?如果我们需要编译器特定的宏,那么我们如何处理像Visual Studio 2012 __cplusplus and C++ 11这样的情况? 很抱歉问.我没有一些这样的编译器可以测试,比如Visual Studio 2012,Intel ICC和Comeau. 编辑:库使用GNUmake文件和标准C 03.它不使用Autotools,它不使用Cmake,它不使用Boost. 解决方法
移动语义是C 11新核心功能之一(它是新标准在某些方面的原因之一),因此对于任何符合标准的编译器,它应该足以满足:
#if (__cpluplus >= 201103L) .... #endif 与其说,作为可变参数和汽车的新语义,“必不可少”. 当然,一旦你进入编译器细节的领域,比如一个破碎的编译器,或者如果你想移动语义在提供“C 0x”或仿真模式而不是真实的编译器中工作,那么……好吧,你进入编译器细节的土地.对于那些你不需要甚至不需要采用任何外部库(无论是Boost,cxxomfort等)的子集,只需复制和调整Predef Wiki中的相关宏和测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |