加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何防范C 03和C 11的构造函数?

发布时间:2020-12-16 07:12:35 所属栏目:百科 来源:网络整理
导读:这类似于 What differences,if any,between C++03 and C++11 can be detected at run-time?.但在这种情况下,我希望通过预处理器进行检测. 当在C 03和C 11中使用源时,我们应该如何保护move constructor(和move assignment)? 以下是否足够(由于它是必不可少的
这类似于 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中的相关宏和测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读