【问题标题】:Is there any reason for using an enum for boolean in c++ instead of the already present bool?是否有任何理由在 c++ 中使用枚举作为布尔值而不是已经存在的布尔值?
【发布时间】:2014-03-04 21:51:56
【问题描述】:

我发现了一些声明这样的枚举的代码:enum boolean {FALSE,TRUE};

是否有任何理由使用它来代替 c++ 中已经存在的普通 truefalse

【问题讨论】:

  • 也许有人习惯使用大写字母? ^^
  • 这是错误的。应该是{ True, False, FileNotFound}。见thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
  • 因为表示布尔值的不同方式越多越好!证明了语言的优越性。
  • 你确定是 C++ 吗?我在 C 代码或带有“C 历史”的代码中发现了这样的声明。
  • 它是 c++,我知道它以“c 方式”使用,但由于它使用 cin 和 cout,所以没有理由不使用 c++ 功能(它已经不使用 gcc 编译)

标签: c++ enums boolean


【解决方案1】:

在 C++ 中使用 enum 作为另一个用户定义的布尔值的主要缺点是它不允许从条件表达式进行自动转换:

enum boolean { FALSE, TRUE };

int main()
{
    boolean b;
    int i = 0;
    int j = 1;
    b = ( i == j ); // error
}

Live Example

另请参阅 Herb Sutter 的 this old GotW column,了解为什么 C++ 选择添加内置 bool 类型。

【讨论】:

  • 这有一个“不错”的错误消息:error: cannot convert 'bool' to 'boolean' in assignment 这增加了混乱。
  • 是的,这就是我主要问的原因,代码中充满了foo(bar) == FALSE而不是!foo(bar)
  • 我在编译 Tesseract-OCR 库时遇到了这个问题。这个枚举是在库和所有依赖项(libJPEG、libTIFF、libGIF 等)中定义的。天哪,经历所有这些都很痛苦代码并删除它..我有“这里已经定义了布尔值.. #insert line number here”。 100 倍。所以我 +1 以获得一个很好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
相关资源
最近更新 更多