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!";
我不确定这个语句是否会引发分段错误,因为如果 frame
是 NULL
那么您无法检查 frame->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;
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 不完全相同。
我问自己是否可以使用以下 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!";
我不确定这个语句是否会引发分段错误,因为如果 frame
是 NULL
那么您无法检查 frame->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;
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 不完全相同。