本文介绍了神秘的线" ?? ??"!在传统code的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我重构了一些非常旧的遗留code这是完全错误和非常有问题的做法,至少在现代标准。

:现在我穿过一条线,我根本无法破译跑

P K 的类型为为int *

 回P 10 ?? K P&* P:的sizeof(* K):!?0;

当我看到它,我简直不敢相信自己的眼睛 - 我知道 运营商,但它的语法布尔? trueresult:falseresult ?? 运营商既不能意义(懒惰的评价也真的不适用于此),不是我能找到一个参考神秘运营商的任何地方。

这将是非常酷的,如果有人流下了对此事的一些情况。


解决方案

这就是所谓的:

C11(ISO / IEC 9899:201X)§5.2.1.1的三字符序列

??=    #
??(    [
??/    \
??)    ]
??'    ^
??<    {
??!    |
??>    }
??-    ~

It's also in C++11(ISO/IEC 14882:2011) § 2.3 Trigraph sequences

So after trigraph replacement, the line return p??!??!k?p?*p:sizeof(*k):0; turns into

return p || k ? p ? *p : sizeof(*k) : 0

Since the ternary operator has a rather low precedence, it's actually:

return (p || k) ? (p ? (*p) : sizeof(*k)) : 0;

这篇关于神秘的线&QUOT; ?? ??&QUOT;!在传统code的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-19 21:09