Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符串布尔比较-为什么?_C++_Boost Variant - Fatal编程技术网

C++ 字符串布尔比较-为什么?

C++ 字符串布尔比较-为什么?,c++,boost-variant,C++,Boost Variant,我在使用boost::variant及其访问者时遇到了一个意外的行为:字符串和bool值是可比较的。我不知道,为什么会这样,但我觉得很有趣。我唯一的想法是带有bool值的变量被解释为char?有人能给我解释一下吗? 比较访问者: #include <iostream> #include <algorithm> #include <vector> #include <boost/variant.hpp> #include <boost/func

我在使用
boost::variant
及其访问者时遇到了一个意外的行为:字符串和bool值是可比较的。我不知道,为什么会这样,但我觉得很有趣。我唯一的想法是带有bool值的变量被解释为char?有人能给我解释一下吗? 比较访问者:

#include <iostream>
#include <algorithm>
#include <vector>
#include <boost/variant.hpp>
#include <boost/function.hpp>

struct my_less : boost::static_visitor<bool*>
{
   template<typename T>
   bool* operator()(T a, T b) const
   {
       return a<b ? new bool(true) : new bool(false);
   }

   template<typename T, typename U>
   bool* operator()(T a, U b) const
   {
       return NULL;
   }
};

int main()
{
typedef boost::variant<int,bool,std::string> datatype;
datatype *a = new datatype(false);
datatype *b = new datatype("abc");

my_less cmp;

bool* val = boost::apply_visitor(cmp,*a,*b);

if(val)
{
    std::cout << *val;
}
else
{
    std::cout << "NULL";
}

}

好的,现在您已经完全更改了程序,让我再试一次

问题是:

datatype *b = new datatype("abc");
“abc”
是一个
const char*
,而不是
std::string
。如果要创建一个
std::string
变量,则需要显式地创建。否则,您将最终创建一个
bool
变量,因为所有指针都可以转换为
bool
,包括
const char*
指针

试试这个

datatype *b = new datatype(std::string("abc"));

bool
std::string
之间的这种相互作用显然是众所周知的,而且有点令人恼火<代码> Boo::变体 BOOL ,C++中没有办法在构造函数上指定模板特化。可以显式专门化赋值,因此您可以编写:

datatype b;
b.operator=<std::string>("abc");

如果您没有将
bool
作为变量,那么字符串文本会自动转换为
std::string
。也许可以使用某种代理伪布尔类。我从未尝试过。

好的,现在您已经完全更改了程序,让我再试一次

问题是:

datatype *b = new datatype("abc");
“abc”
是一个
const char*
,而不是
std::string
。如果要创建一个
std::string
变量,则需要显式地创建。否则,您将最终创建一个
bool
变量,因为所有指针都可以转换为
bool
,包括
const char*
指针

试试这个

datatype *b = new datatype(std::string("abc"));

bool
std::string
之间的这种相互作用显然是众所周知的,而且有点令人恼火<代码> Boo::变体 BOOL ,C++中没有办法在构造函数上指定模板特化。可以显式专门化赋值,因此您可以编写:

datatype b;
b.operator=<std::string>("abc");

如果您没有将
bool
作为变量,那么字符串文本会自动转换为
std::string
。也许可以使用某种代理伪布尔类。我从来没有试过。

请试一下。i、 e.显示
main
如何定义
TRUE
FALSE
结构之前。。。我上传了最终的测试用例,一个完整的程序。任何指针都可以转换到
bool
。请上传测试用例。i、 e.显示
main
如何定义
TRUE
FALSE
结构之前。。。我上传了最终的测试用例,一个完整的程序。任何指针都可以转换到
bool
。很抱歉,更改该程序是一个更大项目的一部分,所以我在这里复制它时遇到了一些失败。+1表示“现在你已经完全更改了你的程序”,表示发布了新的答案,表示正确。很抱歉,更改了该程序,这是一个更大项目的一部分,所以我在这里复制它时失败了。+1表示“现在你已经完全改变了你的程序”,表示发布了新的答案,表示正确。