gpt4 book ai didi

c++ - 关于逻辑运算的 Boost tribool 问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:50 25 4
gpt4 key购买 nike

最近,我使用了 boost::logic::tribool,但有些东西对我来说很奇怪。

#include <iostream>
#include "boost/logic/tribool.hpp"


int main()
{
boost::logic::tribool test = true && boost::logic::indeterminate;

if(test)
{
std::cout << "Executes?" << std::endl;
}

if (true && boost::logic::indeterminate)
{
std::cout << "Executes 2" << std::endl;
}

}

打印 ExecutesExecutes 2。为什么这些条件成立?我完全确定与 (indeterminate state, true) 的 AND 操作返回不确定状态?

引自 boost.org 关于 if 中的 bool 上下文

“如果三态 bool 为真则返回真,否则返回假”

编辑:评论后我添加了这个。这是我读过的最不直观的代码。

#include <iostream>
#include "boost/logic/tribool.hpp"


int main()
{
boost::logic::tribool test = boost::logic::tribool(true) && boost::logic::indeterminate;

if(test)
{
std::cout << "This will NOT execute" << std::endl;
}

boost::logic::tribool second = true && boost::logic::indeterminate;

if (second)
{
std::cout << "This will execute" << std::endl;
}

}

EDIT2:我需要纠正自己......谁能解释一下?

#include <iostream>
#include "boost/logic/tribool.hpp"

boost::logic::tribool LOL( )
{
return boost::logic::indeterminate;
}

int main()
{

boost::logic::tribool LOL_RESULT = LOL();

if (boost::logic::indeterminate)
{
std::cout << "IT WILL BE EXECUTED" << std::endl;
}

if (LOL_RESULT)
{
std::cout << "IT WILL NOT BE EXECUTED" << std::endl;
}
}

最佳答案

TEST(junk, tribool)
{
auto v = boost::logic::indeterminate;
GTEST_MESSAGE() << typeid(v).name();
}

结果:

[----------] 1 test from junk
[ RUN ] junk.tribool
[ NOTE ] bool (__cdecl*)(class boost::logic::tribool,struct boost::logic::detail::indeterminate_t)

boost::logic::indeterminate 是一个函数。所以它评估为真。

TEST(junk, tribool)
{
boost::logic::tribool test = true && boost::logic::tribool{ boost::logic::indeterminate_keyword_t() };

if (test)
{
GTEST_MESSAGE() << "Executes?" << std::endl;
}

if (true && boost::logic::tribool{ boost::logic::indeterminate_keyword_t() })
{
GTEST_MESSAGE() << "Executes 2" << std::endl;
}
}

结果:

[----------] 1 test from junk
[ RUN ] junk.tribool
[ OK ] junk.tribool (64970 ms)
[----------] 1 test from junk (68580 ms total)

关于c++ - 关于逻辑运算的 Boost tribool 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56367088/

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