c++ - typedef, enum, bool, Bool ------混淆

标签 c++ class constructor boolean typedef

我有一个logicAND类,构造函数应该评估两个 boolean 值的AND运算,它的工作方式如下:

class logicAND{
public:
  logicAND(bool a,bool b):value(a&&b){}
  bool output(){return value;}
private:
  bool value;
};
int main(){
  bool m=false;
  bool n=true;
  logicAND t1(m,n);
  t1.output();
}

然后,我在类之前添加了一些旧式宏:

typedef enum { False = 0, True = 1 } Bool;
#define bool Bool
#define true True
#define false False

class logicAND{
public:
  logicAND(bool a,bool b):value(a&&b){}
  bool output(){return value;}
private:
  bool value;
};
int main(){
  bool m=false;
  bool n=true;
  logicAND t1(m,n);
  t1.output();
}

现在我无法再让它工作了。看来主要问题在于构造函数类型不匹配。

感谢指出缺陷、原因和解决方案。 谢谢!

最佳答案

主要问题是您为什么要这样做。您希望宏做什么,也就是说,为什么您希望 boolean 值成为枚举? 但是,要查看出了什么问题,您必须查看预处理器替换宏后代码的样子:

class logicAND
{
public:
    logicAND(Bool a,Bool b):value(a&&b){} //Expects two Bools which works. Now it trys to do a&&b, this actually is well defined for enums. However it returns a bool (!) which cannot be stored in "value" since that is a Bool.
    Bool output(){return value;}
private:
    Bool value; //This now is a Bool! Not a real bool
};

所以它崩溃的原因是你试图将从 a&&b 返回的 bool 存储在 Bool 类型的变量中。解决这个问题的明显方法是删除宏。或者您需要解释为什么需要它们。

关于c++ - typedef, enum, bool, Bool ------混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10056174/

相关文章:

c++ - 在对象中构造对象

C++ 新手 : destructor

c++ - 如何制作 C++ 程序循环的一部分?

objective-c - Objective C 类引用作为属性

python - 如何在新类中实例化对象?

java - 将 ObjectS 实例化为 Object 如何工作?这里发生了什么?

c# - 结构构造函数调用 this()

java - 如何解释构造函数中的 return 语句?

c++ - 两个矩阵的C++高效按元素匹配

java - flatbuffers c++ 从缓冲区转换为对象仅适用于 root_type(而 java 拥有所有)