Google C++编程规范 – 第二十七条 -《局部变量》

Google C++编程规范 – 第二十七条 -《局部变量》


【规范】

将一个变量限制在尽可能小的作用域内,并且要在声明部分初始化变量

【详解】

C++语言本身允许在一个函数的任何位置声明变量。

但是我们鼓励大家将变量声明在尽可能小的范围内,且声明的位置尽量离首次使用的位置越近越好。

这有助于阅读代码的人可以方便的看到变量的声明是什么,变量的类型是什么以及变量初始化的值是什么。

特别需要强调的是,在变量声明的时候就要进行赋值,不要拆成两步。请看下面的例子:

int i;
i = f();      // 错误;声明和赋值被拆开了
int j = g();  // 正确;声明时便赋值

再看一个例子:

vector v;
v.push_back(1);  // 不建议;声明和赋值被拆开了。
v.push_back(2);

vector v = {1, 2};  // 正确;声明和赋值同时进行

注意,在for语句、if语句和while语句的条件部分声明的变量,是可以继续在同一作用域内使用的,比如下面例子中for语句的i变量、while语句的p指针:

for (int i = 0; i < 10; ++i) ...

while (const char* p = strchr(str, '/')) str = p + 1;

大括号是切割作用域的元凶之一。而一个对象变量,就会在离开其作用域的位置进行析构,比如下面的例子:

for (int i = 0; i < 1000000; ++i) {
  Foo f;  // f的构造函数和析构函数会被调用1000000次
  f.DoSomething(i);
} //f对象的作用域仅限大括号内,因此在右大括号处会发生f对象的析构动作。

所以,对于上述情况,应该这样来写:

Foo f;  // f的构造函数和析构函数只会被调用一次
for (int i = 0; i < 1000000; ++i) {
  f.DoSomething(i);
}

谢谢!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值