对于单行if或循环使用大括号(即{})的目的是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (170)

例如,以下面这个奇怪的代码为例:

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
{
    if (i % 2 == 0)
    {
        j++;
    }
}

并将其替换为:

int j = 0;
for (int i = 0 ; i < 100 ; ++i)
    if (i % 2 == 0)
        j++;

使用第一个版本有什么好处?

提问于
用户回答回答于

我对这位讲师的能力表示怀疑。考虑到他的观点:

  1. 有人真的会写(或想读)(b*b) - ((4*a)*c)是吗?有些先例是显而易见的(或者应该是的),而额外的括号只会增加混乱。
  2. 格式化条件和循环有两个广泛的约定:if(Cond){code;}

首先,我同意他的观点。开口{没有那么明显,所以最好假设它总是在那里。然而,在第二个例子中,我(以及我工作过的大多数人)省略单个语句的大括号是没有问题的。(当然,只要缩进是系统的,并且你使用这种样式是一致的。(还有很多非常优秀的程序员,他们编写的代码可读性很强,即使在格式化第一种方式时也省略了大括号。)

  1. 事情就像if ( NULL == ptr )丑陋到足以阻碍可读性。直观地写出比较,任何使代码不自然的东西都会使其可读性降低。
  2. 除了int专门用于特殊情况。对于经验丰富的C和C++程序员,使用unsigned信号位操作员。C++没有真正的基数类型(或任何其他有效的子范围类型);unsigned由于升级规则,数值不起作用。没有算术运算会有意义的数值,如序号,可能是unsigned然而,我反驳它,因为它发送了错误的信息:按位操作也没有意义。 基本规则是整数类型是int,_unless_使用另一个类型是有重要原因的。
  3. 系统地这样做是有误导性的,实际上并不能防止任何事情的发生。在严格的OO代码中,delete this;是最常见的情况(你不能设置thisNULL),或者其他情况下,大多数delete在析构函数中,所以以后不能访问指针。并将其设置为NULL不会对任何其他的指针产生任何影响。系统地将指针设置为NULL给人一种虚假的安全感,并不能买到任何东西。

热门问答

数据万象持久化在JavaScript SDK中的问题?

可以的,有Domain参数。请参考:https://github.com/tencentyun/cos-js-sdk-v5/blob/master/csp/csp.html#L56

有谁用unity 3d 实现过对象的上传储存和者下载?

我不是米

腾讯 · 工程师 (已认证)

对象存储工程师
推荐

请正确填写bucket参数,bucket参数里面不要带上-appid

cos.sliceUploadFile支持断点续传吗?

如果用的是 cos-js-sdk,那么 cos.restartTask 是会断点续传的,用法没有问题。 PS: sdk 使用可以参考 demo.js https://github.com/tencentyun/cos-js-sdk-v5/blob/master/demo/demo...... 展开详请

使用独立H5接入人脸核身,在微信浏览器拍摄视频按钮无法点击?

旺仔小小鹿

社区 · 运营 (已认证)

Less is more
推荐

使用iframe会有问题 ,微信有限制,不允许使用iframe调用jsapi摄像头 ,微信里,不能用iframe

ios应该都不行的,安卓需要看是什么浏览器。

云服务器中ping不可达,请教一下如何恢复?

推荐已采纳
本地主机 ping 不通实例可能由以下问题导致: 目标服务器的设置不正确 域名没有正确解析 链路故障 在确保本地网络正常的前提下(即您可以正常 ping 通其他网站),可根据以下操作进行排查: 检查实例是否配置公网 IP 检查安全组设置 检查系统设置 检查域名是否备案 检查域名解...... 展开详请

为什么加固之后生成四个文件?

腾讯云@移动安全

腾讯 · 移动开发工程师 (已认证)

腾讯云移动安全前端开发
推荐

选择最后一个_legu_aligned_signed.apk 文件,这个是加固并已重签名的文件。

所属标签

扫码关注云+社区

领取腾讯云代金券