IF 语句和 While 循环的 C++ 短路

C++ Short-Circuit for IF-Statments and While-Loops

我问自己是否可以使用以下 if 条件在 C++ 和 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->data!

这是 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;

I'm not sure wheter this statement could throw an segmentation fault

它不会出现段错误。它实际上是short-circuit逻辑运算符的典型应用。

And is it the same for while loop conditions?

是的。

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

例如,这仍然是 short-circuited:

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

And is it the same for the || operator?

是的。也是短路

嗯,不完全是。 OR 关系在第一部分为 TRUE 时得到 short-circuited。这与 AND 不完全相同。