定义支持/不支持功能的HAS_XXX/NO_XXX
Define HAS_XXX / NO_XXX for supporting / no-supporting a feature
为什么 Boost C++11 开发人员更喜欢NO_XXX而不是HAS_XXX?如您所见,BOOST_NO_CXX11_DELETED_FUNCTIONS 用于 \boost\coreoncopyable.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更具优势?
未定义的"has"表示 (a) 您检测到该功能丢失,或 (b) 您忘记运行检测该功能是否丢失的代码。
然后,您编写不依赖于该功能的代码;构建在所有 4 种情况下都成功(功能存在/不存在,检测代码运行/不运行)。 但在 4 种情况中的 1 种情况下(存在功能,跳过检测代码),编译了错误的代码。
未定义的"否"表示 (a) 您已检测到该功能存在,或 (b) 您忘记运行检测该功能是否缺失的代码,
然后编写不依赖于该功能的代码。 当您忘记运行功能检测代码时,构建将失败,并且该功能不存在。
因此NO
静默错误案例少 1 个,静态检测程序逻辑错误的硬错误多 1 个。
似乎是一个很好的计划。
实际上有一些区别——不是在最终输出上,而是在默认设置上:
- 使用
HAS_XXX
语义,如果需要,需要显式启用该功能,默认为关闭该功能。 - 使用
NO_XXX
语义完全反转,默认值为打开,但您可以显式禁用它(例如,因为您的编译器不支持它)
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- c++20[[no.unique_address]]中的新功能是什么
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- "no matching function for call to 'Vector::Vector'"错误
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 处理"no operator found"
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 如何解决"no Qt platform plugin could be initialized"问题?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- do while 循环中的 if 语句以 yes 或 no 结尾
- 从 TVector2 类派生复杂类:"No matching function for call to Complex::Complex()"
- 错误消息:使用"string* +="后"no match for 'operator+='"
- Eulers 项目问题 no 345 听不懂几行代码
- "No-Const Pointer to Const "调用功能
- 如何在 c++ 中将 s1 和 s2 与 no if 语句进行比较
- "No such file or directory" C++标头问题
- 如何解决错误说"No matching function call for XXX"?