C++ 涉及constexpr实例的相等性检查
我在班上添加了以下成员:C++ 涉及constexpr实例的相等性检查,c++,equality,constexpr,C++,Equality,Constexpr,我在班上添加了以下成员: constexpr static folly::Unit nullUnit {}; 以下是folly::Unit的链接: 根据标志,我将返回folly::unit或nullUnit: if (mutate_resp->processed()) { LOG(INFO) << "check returns folly::unit";
constexpr static folly::Unit nullUnit {};
以下是folly::Unit的链接:
根据标志,我将返回folly::unit或nullUnit:
if (mutate_resp->processed()) {
LOG(INFO) << "check returns folly::unit";
return folly::unit;
}
LOG(INFO) << "check returns nullUnit";
return nullUnit;
然而,尽管我在输出中看到了以下内容,但这种比较似乎总是正确的:
I0608 22:43:37.729920 18225 raw-async-table.cc:132] check returns folly::unit
I0608 22:43:37.731446 18225 raw-async-table.cc:135] check returns nullUnit
任何暗示都是值得赞赏的愚蠢有以下几点:
constexpr Unit unit {};
bool operator==(const Unit& /*other*/) const { return true; }
你有这个:
constexpr static folly::Unit nullUnit {};
这些都是一样的,这是有道理的。此外,愚蠢还包括:
constexpr Unit unit {};
bool operator==(const Unit& /*other*/) const { return true; }
因此,很明显,任何单位都将与任何其他单位进行比较。您的
=
运算符始终返回true。为什么你会认为它是假的呢?这个单元
类型或多或少是一个可以实例化的无效
。因此,实例表示没有值,并且定义所有Unit
对象彼此相等。您似乎认为Unit
是一种“符号”类型,这与链接文件中的注释完全不同。在阅读了Unit.h之后,我得到了相同的理解:-)