加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 我应该明确规定变量范围吗?

发布时间:2020-12-16 03:40:59 所属栏目:百科 来源:网络整理
导读:这更像是一个样式问题,因为我知道在实践中大多数编译器可能会优化以产生相同的效果,但我一直在阅读,一般来说,你应该总是在它们被使用的范围内声明/定义变量.因此,在我无法内联声明的情况下,例如下面的代码片段,我已经考虑将索引变量括在作用域括号中(大括号,
这更像是一个样式问题,因为我知道在实践中大多数编译器可能会优化以产生相同的效果,但我一直在阅读,一般来说,你应该总是在它们被使用的范围内声明/定义变量.因此,在我无法内联声明的情况下,例如下面的代码片段,我已经考虑将索引变量括在作用域括号中(大括号,不确定在这种情况下你称它们是什么),以便明确地限制这些变量的范围.这是好习惯吗?如果是这样,你能解释一下原因吗?
{
    size_t i = 0; // this variable has no use outside of the range-based for loop
    for (auto const input : input_vector)
    {
        neuron_sequence[i].ForceSignal(input);
        ++i;
    }
}

解决方法

当然这是一个很好的做法.它明确限制了可以使用该变量的位置.我经常这样做.像这样的范围也用于强制一些对象析构函数运行.

例如:

std::vector<int> v;
v.resize( 10 ); // now holds memory for 10 ints

你如何清理这段记忆?无法调用任何函数或以任何方式手动告诉向量v清理其内存.解决方案是强制它超出范围(假设我正确使用了交换):

std::vector<int> v;
v.resize( 10 ); // now holds memory for 10 ints
{
  std::vector<int> temp;
  temp.swap( v );
} // temp goes out of scope and clears the memory that v used to hold

另一种常见用法是在交换机情况下.通常我需要在交换机中创建一个临时变量:

switch( val )
{
case constant:
  {
    int x = 10;
    // ... do stuff
  }
}

我能记住的最后一个地方是为某些代码编写测试用例.当经常对单元进行测试时,我只想尽可能快地编写测试代码而不需要花费太多时间.所以,我在一个函数中放置了一堆相关的测试,但是将局部变量包装在不同的范围内只是为了确保我没有遇到任何奇怪的错误(可能通过测试共享迭代器).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读