Kri*_*ato 21 c c++ coding-style
可能重复:
如何检查等于?(0 == i)或(i == 0)
为什么人们经常在C#中看到"null!= variable"而不是"variable!= null"?
我一直在看一个奇怪的教程以及一些DirectX代码,并注意到许多有经验的C++程序员用以下方式编写表达式:
(<constant> == <variable>)
Run Code Online (Sandbox Code Playgroud)
而不是我的传统智慧似乎更喜欢:
(<variable> == <constant>)
Run Code Online (Sandbox Code Playgroud)
例如if (NULL == ptr)而不是if (ptr == NULL).我更喜欢第二种选择,如果没有其他原因选择前者,我的理由是变量似乎是表达式的"接收"端.
但我怀疑前者用于避免无意中通过使用=而不是将变量的值赋给变量==.这是对的吗?
Kil*_*oth 28
过去就是这种情况,是的.当然,现在几乎所有的编译器都会对if()条件中的任务发出警告,因此只有那些经常压制警告的人才能获得优势.
这被称为"Yoda Conditional"!
我非常喜欢这个词,因为:
if(Light::On == light)
Run Code Online (Sandbox Code Playgroud)
读作:
"如果亮了"
如上所述,这用于防止错误分配.可以说这种做法是基于现代IDE的陈旧,但我仍然认为这是一种很好的做法.
这是一个常见的理由,因为您不希望将常量推到屏幕的最右侧,并且表达方式很长.后一种说法对我来说从未听起来特别有说服力,前者现在并不是真正有效,因为任何自尊的编译器都会发出警告(你会编译警告 - 错误,不是吗?:-) .
编辑:我刚刚看到了新的Xcode 4预览版,只看他们选择的示例来说明他们的新"Fix-it"功能!
alt text http://devimages.apple.com/technologies/tools/images/new_autocorrect20100721.jpg
捕捉分配和比较之间的差异。
如果你的意思是:
if (ptr == foo)
Run Code Online (Sandbox Code Playgroud)
但是输入
if (ptr = foo)
Run Code Online (Sandbox Code Playgroud)
if仍然是有效代码,因为ptr = foo将ptr其设置为值后,将对其进行布尔检查foo。显然,您不需要这样做。
但是,我发现它极大地损害了可读性,并且考虑到大多数IDE和预处理器无论如何都会抓住这种情况,因此请不要使用这种样式。
| 归档时间: |
|
| 查看次数: |
4277 次 |
| 最近记录: |