布尔数据类型与整数数据类型表示真值

时间:2016-09-22 05:55:29

标签: c++ c boolean primitive

将bool数据类型与整数值一起使用的优点是0和1对于true和false值有什么好处,使用效率会更高? 它在c和c ++等不同语言中有何不同?

4 个答案:

答案 0 :(得分:3)

当没有int时,

bool在C中使用,没有优势 1 使用整数类型来表示C ++或现代C中的布尔值:

  1. bool有意义,int不是:
  2. bool try_something();
    int try_something(); // What does this return?
    

    在C中通常有功能返回int来表示成功或失败,但很多(大多数?)这些都不会在成功时返回1而在失败时返回0 ,它们遵循UNIX标准,如果成功则返回0,如果出现错误则返回其他内容,因此您可以获得如下代码:

    int close(int fd);
    
    if (close(fd)) { /* Something bad happened... */ }
    

    请参阅close手册,该手册会在成功时返回0,在失败时返回-1。对于新用户而言,此代码令人不安,您希望close返回一些如果成功则返回的内容,而不是相反的内容。

    1. 如果需要存储大量的布尔值,您可能希望通过仅使用一位来表示值来优化存储(如果将其存储在int中,则使用32位),以及在C ++中,std::vector<bool> 2 已经专门做到这一点,所以:
    2. std::vector<bool> bvec(8000); // Size ~ 1000 bytes (optimization of std::vector<bool>)
      std::vector<int> ivec(8000);  // Size ~ 32000 bytes (32-bits int)
      

      1 如果以相同的方式使用它们没有任何好处(例如,通过bool b = f();int b = f();vector<bool>上面的int (如果您可以在bool中替换int而没有问题,那么请执行此操作)),但如果使用std::vector<bool>使用按位运算存储多个布尔值,则这是另一个问题

      2 请注意,这仅适用于std::array<bool, N>,其他容器(例如 { "cart_item": { "productOption": { "extensionAttributes": { "configurableItemOptions": [ { "optionId": "131", "optionValue": 4 }, { "optionId": "90", "optionValue": 32 } ] } }, "productType": "configurable", "qty": 1, "quoteId": "88", "sku": "ONE_TIME_PRODUCT" } } )未优化,因为它们无法使用代理对象“代表”一点值。

答案 1 :(得分:2)

这主要是一个风格问题,因此很难证明一种方法是正确的。如果x不为零,则C允许语法if(x == true)执行条件。所以“真实”可能是一个陷阱,return true并不总是意味着你的想法。另一方面,在return 1这样的函数中,is_valid()bool更清晰。 bool可以提高内存效率,但这可能是一种错觉,出于效率原因,它通常被填充到四个字节。

mywdgt = openwidget("canvaswidget", 256, 256, true); 的主要问题,即风格问题,是

mywdgt = openwidget("canvaswidget", 256, 256, ALLOW_ALPHA);

显然意味着打开或创建一个小部件,它是一个画布,并且是256 x 256像素。但最后一个参数是什么?

bool

更加清晰。你知道参数是什么以及它做了什么 一瞥。因此,在函数签名中应该避免string StrRefNo = Request.QueryString["ref"]; string[] SMSid = StrRefNo.Split('$'); var ref = SMSid[0]; var smsLinkId = Convert.ToInt32(SMSid[1]); DownloadsDbEntities db = new DownloadsDbEntities(); var data = (from d in db.SMSLink_Expiry where d.RefNo == ref && d.SMSLink.ID == smsLinkId select d).ToList(); if (data.Count > 0) { string ss="yes"; } 个参数, 改为使用define并说出标志的含义。

答案 2 :(得分:0)

bool - 内置的布尔类型。 bool可以包含值truefalse

因此,如果您的方案中boolean类型有意义,例如,flagreturn值表示yes/nosuccess/failure ,你会考虑使用bool

但是如果你有多个这样的值,使用int(s)会更合适。 bool不合适,因为所涉及的值应限制在true/false

答案 3 :(得分:-1)

为了节省内存,强烈建议使用BOOL,例如,如果我们只是检查条件(true或false)或类似的东西。

Bool仅占用 1字节(通常最小可寻址大小)的内存,而整数可能需要2或4个字节或更多取决于编译器。

所以非常建议使用bool而不是整数来存储1或0.如果你能在更少的内存中做到这一点,为什么要浪费内存。

并且bool可以保证只有0或1的值。因此它适用于条件语句。