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
  }
}

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...