微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

这更像是一个样式问题,因为我知道在实践中大多数编译器可能会优化以产生相同的效果,但我一直在阅读,一般来说,你应该总是在它们被使用的范围内声明/定义变量.因此,在我无法内联声明的情况下,例如下面的代码片段,我已经考虑将索引变量括在作用域括号中(大括号,不确定在这种情况下你称它们是什么),以便明确地限制这些变量的范围.这是好习惯吗?如果是这样,你能解释一下原因吗?
{
    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
  }
}

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

原文地址:https://www.jb51.cc/c/110552.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐