gpt4 book ai didi

c++ - STATIC_ASSERTION_FAILURE 有什么作用?

转载 作者:行者123 更新时间:2023-11-30 01:13:55 24 4
gpt4 key购买 nike

我正在尝试了解 SAT 求解器 (miniSAT http://minisat.se/downloads/MiniSat_v1.12b_src.zip) 的开源实现。在其中一个头文件中,我遇到了以下代码片段。

template <bool> struct STATIC_ASSERTION_FAILURE;
template <> struct STATIC_ASSERTION_FAILURE<true>{};
#define TEMPLATE_FAIL STATIC_ASSERTION_FAILURE<false>()

我无法理解这到底是做什么的。根据我对模板的了解,它们通常具有以下格式

template <class T> 

但是在网上查了一些东西后,我发现模板可以通过使用来进行编译时执行

template <datatype> 

在这种情况下,数据类型是 bool。但我无法完全理解这样一段代码的作用。我对第二行和第三行特别困惑。

在代码的前面,TEMPLATE_FAIL 在泛型类的方法中使用如下:-

// Don't allow copying (error prone):
vec<T>& operator = (vec<T>& other) { TEMPLATE_FAIL; }
vec (vec<T>& other) { TEMPLATE_FAIL; }

这个特定的代码片段似乎是某些用于检查断言失败的库的一部分。但话又说回来,我无法在模板、构造函数等方面完全理解这一点。(如果缺少某些内容,请就如何改进问题格式提出建议。)

谢谢。

最佳答案

这是一个专门的模板。基础模板STATIC_ASSERTION_FAILURE<bool>未定义,但特化STATIC_ASSERTION_FAILURE被定义为。结果,STATIC_ASSERTION_FAILURE<expr>被定义当且仅当 expr是一个编译时常量 true .

实际上,这意味着 STATIC_ASSERTION_FAILURE<(2+2==4)>已定义但 STATIC_ASSERTION_FAILURE<(2+2==5)>不是。因此,后者是链接错误。

C++11 引入了 static_assert<>以此目的。它往往会给出更清晰的错误信息

关于c++ - STATIC_ASSERTION_FAILURE 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30885042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com