【发布时间】:2019-08-12 03:31:45
【问题描述】:
为什么 Boost C++11 开发者更喜欢 NO_XXX 而不是 HAS_XXX?可以看到,BOOST_NO_CXX11_DELETED_FUNCTIONS用在\boost\core\noncopyable.hpp中,
#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS)
noncopyable( const noncopyable& ) = delete;
noncopyable& operator=( const noncopyable& ) = delete;
#else
private: // emphasize the following members are private
noncopyable( const noncopyable& );
noncopyable& operator=( const noncopyable& );
#endif
如果他们选择了 BOOST_HAS_CXX11_DELETED_FUNCTIONS,事情不会改变,
#if defined(BOOST_HAS_CXX11_DELETED_FUNCTIONS)
noncopyable( const noncopyable& ) = delete;
noncopyable& operator=( const noncopyable& ) = delete;
#else
private: // emphasize the following members are private
noncopyable( const noncopyable& );
noncopyable& operator=( const noncopyable& );
#endif
使用 NO_XXX 是否比使用 HAS_XXX 更有优势?
【问题讨论】:
-
你必须选择其中之一,而不是混合它们。自动工具(
autoconf等)使用HAS; Boost 可能选择了将自己与自动工具区分开来的替代方案。 -
您可能需要询问命名为
BOOST_NO_CXX11_DELETED_FUNCTIONS的人。其他人所能做的就是推测和发表意见。 (我在 Boost 网站上找不到特别涵盖该名称的命名约定理由。)
标签: c++ c boost c-preprocessor