美文网首页Exceptional C++
【Exceptional C++(27)】Bool

【Exceptional C++(27)】Bool

作者: downdemo | 来源:发表于2018-01-30 15:41 被阅读6次

问题

  • 如果没有bool类型,能用已有的数据类型达到相同效果吗?

解答

  • 不能,bool型和true,false无法通过现有的语言特性准确实现,下面是尝试实现
typedef int bool;
const bool true = 1;
const bool false = 0;
// 这种方法不允许重载bool,例如
// file f.h
void f(int); // OK
void f(bool); // OK,声明相同函数
// file f.cpp
void f(int) { ... } // OK
void f(bool) { ... } // 错误,重定义
// 另一个问题是跟这相同的代码
void f(bool b) {
    assert(b != true && b != false);
}
  • typedef ... bool的主要问题是不允许重载
#define bool int
#define true 1
#define false 0
  • 这种方法是很糟糕的,不仅有和typedef相同的问题,还破坏了#define
enum bool { false, true };
// 比起typedef的好处是允许重载
// 但在条件表达式不允许自动类型转换
bool b;
b = (i == j); // 错误,int不能隐式转换成enum
  • enum bool允许重载,但在条件表达式中不能进行自动类型转换
class bool {
public:
    bool();
    bool(int); // 允许在条件表达式中转换
    operator=(int);
    // operator int(); // 有问题
    // operator void*(); // 有问题
private:
    unsigned char b_;
};
const bool true(1);
const bool false(0);
// 如果不使用自动类型转换,无法用在条件判断中
bool b;
if (b) // 错误,不能转换与int或void*相似的类型
...
  • bool类允许重载但不能让bool对象在条件中作测试

相关文章

  • 【Exceptional C++(27)】Bool

    问题 如果没有bool类型,能用已有的数据类型达到相同效果吗? 解答 不能,bool型和true,false无法通...

  • 2020-03-11 c++ book

    exceptional c++ style 中文版more exceptional c++ 中文版exceptio...

  • 书签

    笔记 C++ PrimerEffective C++Exceptional C++Effective STLC++...

  • 书签

    笔记 C++ PrimerEffective C++Exceptional C++Effective STLC++...

  • 【Exceptional C++】索引

    本书内容取自作者博客的gotw栏目,即Guru of the Week,通过问答方式更深入地挖掘C++语言特性适用...

  • 292. Nim Game

    C++ 最优解 简化bool

  • 当下编程之道:C++屹立不倒

    正好我一个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C++和C++ Codin...

  • 【Exceptional C++(1)】Iterators

    问题 下面代码中有至少四个与iterator相关的问题,找出来 说明 std::copy拷贝[first,last...

  • 大在在

    ···c++ struct Loop { int epfd; int numPolls = 0; bool can...

  • 王者编程: Why C++?

    序言 前几个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是 *Exceptional C++ * 和 C+...

网友评论

    本文标题:【Exceptional C++(27)】Bool

    本文链接:https://www.haomeiwen.com/subject/lcjczxtx.html