【问题标题】:C++ Short-Circuit for IF-Statments and While-Loops用于 IF 语句和 While 循环的 C++ 短路
【发布时间】:2018-08-04 10:06:01
【问题描述】:

我问自己是否可以通过以下 if 条件在 C++ AND C 中进行短路:

uvc_frame_t *frame = ...; //receive a new frame

if(frame != NULL && frame->data != NULL) cout << "Data read";
    else cout << "Either frame was NULL or no data was read!";

我不确定此语句是否会引发分段错误,因为如果 frameNULL,那么您将无法检查 frame-&gt;data

  • while 循环条件也一样吗?

    while(frame == NULL && frame->data == NULL)
    {
    //.. receive frame
    }
    
  • || 运算符也一样吗?

  • 如何强制评估 if 语句中的所有值(即使我检查 3 个变量)

这是frame 的底层结构:

typedef struct uvc_frame {
   void *data;
   size_t data_bytes;
   uint32_t width;
   uint32_t height;
   enum uvc_frame_format frame_format;
   size_t step;
   uint32_t sequence;
   struct timeval capture_time;
   uvc_device_handle_t *source;
   uint8_t library_owns_data;
 } uvc_frame_t;

【问题讨论】:

标签: c++ if-statement segmentation-fault short-circuiting


【解决方案1】:

我不确定这个语句是否会引发分段错误

它不会出现段错误。这实际上是短路逻辑运算符的典型应用。

while循环条件也一样吗?

是的。

短路评估不是 if 条件或 while 条件的属性。它是表达式本身的属性。即使不作为条件,它仍然是短路。

比如这个还是短路的:

bool x = frame != NULL && frame->data != NULL;

|| 也一样吗?运营商?

是的。也是短路。

嗯,不完全是。当第一部分为 TRUE 时,OR 关系将其短路。这与 AND 不完全相同。

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 2013-06-09
    • 2016-01-12
    • 2012-06-18
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 2018-07-04
    相关资源
    最近更新 更多