This question already has answers here:
C++ What is the purpose of casting to void? [duplicate]
(2个答案)
2年前关闭。
我一直在看journalctl代码,并遇到了以下代码块。
如果在测试条件时结果不为零,则似乎是退出一系列条件测试的一种简便方法。很聪明
但是我不确定
(2个答案)
2年前关闭。
我一直在看journalctl代码,并遇到了以下代码块。
如果在测试条件时结果不为零,则似乎是退出一系列条件测试的一种简便方法。很聪明
但是我不确定
void
强制转换的目的。是否抑制一些编译器输出?即使使用-Wall
和-pedantic -pedantic-errors
,g ++也不关心这两种方式。m1 = strjoina("_SYSTEMD_UNIT=", unit);
m2 = strjoina("COREDUMP_UNIT=", unit);
m3 = strjoina("UNIT=", unit);
m4 = strjoina("OBJECT_SYSTEMD_UNIT=", unit);
(void)(
/* Look for messages from the service itself */
(r = sd_journal_add_match(j, m1, 0)) ||
/* Look for coredumps of the service */
(r = sd_journal_add_disjunction(j)) ||
(r = sd_journal_add_match(j, "MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1", 0)) ||
(r = sd_journal_add_match(j, "_UID=0", 0)) ||
(r = sd_journal_add_match(j, m2, 0)) ||
/* Look for messages from PID 1 about this service */
(r = sd_journal_add_disjunction(j)) ||
(r = sd_journal_add_match(j, "_PID=1", 0)) ||
(r = sd_journal_add_match(j, m3, 0)) ||
/* Look for messages from authorized daemons about this service */
(r = sd_journal_add_disjunction(j)) ||
(r = sd_journal_add_match(j, "_UID=0", 0)) ||
(r = sd_journal_add_match(j, m4, 0))
);
f (r == 0 && endswith(unit, ".slice")) {
...
最佳答案
禁止显示有关此逻辑表达式未使用结果的编译器警告。此逻辑或表达式的建立是由于其副作用和短路评估特性。但是,代码的编写者并不关心其最终结果。编译器可能不够聪明,无法意识到这一点。它可能会警告最终结果将被丢弃。
向人类读者传达代码作者放弃逻辑表达式结果的意图。
显式转换为void
是一种普遍接受的惯用语,可将其意图传达给编译器和读者。
附言||
的此应用是“经典” C风格表达式编程中分支的一个示例,如我在此处所述:https://stackoverflow.com/a/1618867/187690
关于c++ - 空投在这里的目的是什么? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45361247/
10-12 20:31