首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >is_defined常数函数

is_defined常数函数
EN

Stack Overflow用户
提问于 2015-03-19 10:34:25
回答 2查看 317关注 0票数 3

我需要知道NDEBUG是否是在指定to以外说明符时定义的。我在想,按照这个警察的职能:

代码语言:javascript
复制
constexpr inline bool is_defined() noexcept
{
  return false;
}

constexpr inline bool is_defined(int) noexcept
{
  return true;
}

然后像这样使用它:

代码语言:javascript
复制
void f() noexcept(is_defined(NDEBUG))
{
  // blah, blah
}

标准库或语言是否已经为此提供了一个工具,这样我就不会重新发明轮子了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-19 16:52:25

如果您只对NDEBUG感兴趣,这相当于测试assert()是否评估它的参数。在这种情况下,您可以使用:

代码语言:javascript
复制
void f() noexcept(noexcept(assert((throw true,true))))
{
    // ...
}

当然,这并不一定是一种改进:)

票数 2
EN

Stack Overflow用户

发布于 2015-03-19 13:54:38

只需使用#ifdef

代码语言:javascript
复制
#ifdef  NDEBUG
using is_ndebug = std::true_type;
#else
using is_ndebug = std::false_type;
#endif

void f() noexcept(is_ndebug{}) {
  // blah, blah
}

或者其他许多类似的方法:constexpr函数返回boolstd::true_type (有条件的)。两种类型之一的static变量。一个特征类,它采用枚举,其中列出了各种#define令牌等效物(eNDEBUG等),这些标记可以针对它支持的每个令牌进行专门化,如果没有这种支持,则生成错误。使用typedef而不是using (如果您的编译器对使用有片状的支持,我将查看MSVC2013)。我相信还有其他人。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29142256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档