Igo*_*aka 28 javascript c c# c++ java
这听起来很愚蠢,但多年来我一直无法想出一个需要这个的用例.快速谷歌搜索没有透露任何值得的东西.
从内存中有一个Bjarne Stroustrup提到的用例,但我找不到它的引用.
那你为什么不能用C语言呢:
int val = 0;
if val
doSomehing();
else
doSomehinglse();
Run Code Online (Sandbox Code Playgroud)
我可以接受"我们不能为词法分析添加支持"的原因,我只想弄清楚这种语法是否打破了其他语言结构.考虑到C/C++中有多少令人讨厌的语法特性,我几乎不认为这会增加很多复杂性.
Tam*_*ege 49
如果if
构造中的表达式周围没有括号,则以下语句的含义是什么?
if x * x * b = NULL;
Run Code Online (Sandbox Code Playgroud)
是吗
if (x*x)
(*b) = NULL;
Run Code Online (Sandbox Code Playgroud)
或者是它
if (x)
(*x) * b = NULL;
Run Code Online (Sandbox Code Playgroud)
(当然这些都是愚蠢的例子,甚至没有明显的原因,但你明白了)
TLDR:C中需要使用括号来消除任何语法模糊的可能性.
whe*_*ies 12
告诉我如何interprit以下:
if x ++ b;
Run Code Online (Sandbox Code Playgroud)
看起来很傻但......
if( x ) ++b;
Run Code Online (Sandbox Code Playgroud)
要么
if( x++ ) b;
Run Code Online (Sandbox Code Playgroud)
或者"x"有一个重载运算符然后......
if( x ++ b){;}
Run Code Online (Sandbox Code Playgroud)
编辑:
正如Martin York指出的那样,"++"具有更高的优先级,这就是为什么我必须添加运算符重载tidbit.在处理现代编译器时,他是完全正确的,直到你允许C++附带的所有重载优点.
我认为更好的问题是“我们为什么想要这样的东西?” 而不是“为什么我们没有它?”。它在词法分析器中引入了另一个不必要的边缘情况,这样您就可以避免输入 4 个额外的字符;并通过允许已经支持所有可能情况的简单语法的例外来增加规范的复杂性。更不用说要注意歧义,这在编程语言中没有多大价值。