This question already has answers here:
What does the ??!??! operator do in C?
(4个答案)
7年前关闭。
我正在重构一些和的旧遗留代码,这些代码充满了错误和非常可疑的做法,至少对于现代标准而言是如此。现在,我碰到了一条我根本无法解读的线:
当我看到它时,我不敢相信自己的眼睛-我知道
如果有人对此事有所了解,那真的很酷。
它也在C++ 11(ISO/IEC 14882:2011)§2.3 Trigraph序列中
因此,在替换了Trigraph之后,
由于三元运算符的优先级较低,因此实际上是:
(4个答案)
7年前关闭。
我正在重构一些和的旧遗留代码,这些代码充满了错误和非常可疑的做法,至少对于现代标准而言是如此。现在,我碰到了一条我根本无法解读的线:
p
和k
的类型为int *
return p??!??!k?p?*p:sizeof(*k):0;
当我看到它时,我不敢相信自己的眼睛-我知道
?
运算符,但是它的语法是bool ? trueresult : falseresult
,而??
运算符没有任何意义(懒惰的评估在这里实际上不适用),我找不到该神秘运算符的引用任何地方。如果有人对此事有所了解,那真的很酷。
最佳答案
它称为Trigraph:
C11(ISO/IEC 9899:201x)§5.2.1.1Trigraph序列
??= #
??( [
??/ \
??) ]
??' ^
??< {
??! |
??> }
??- ~
它也在C++ 11(ISO/IEC 14882:2011)§2.3 Trigraph序列中
因此,在替换了Trigraph之后,
return p??!??!k?p?*p:sizeof(*k):0;
行变成了return p || k ? p ? *p : sizeof(*k) : 0
由于三元运算符的优先级较低,因此实际上是:
return (p || k) ? (p ? (*p) : sizeof(*k)) : 0;
关于c++ - 遗留代码中的密码行 “??!??!” ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17718286/
10-12 15:58