gpt4 book ai didi

c++ - 我应该明确地限定变量的范围吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:15 24 4
gpt4 key购买 nike

这更像是一个风格问题,因为我知道在实践中大多数编译器可能会优化以提供相同的效果,但我一直在阅读,一般来说,您应该始终在它们所处的范围内声明/定义变量被使用。因此,在我无法内联声明的情况下,例如以下代码片段,我考虑过将索引变量括在范围括号中(大括号,不确定在这种情况下您如何调用它们)以便明确地限制这些变量的范围。这是好习惯吗?如果是这样,您能解释一下原因吗?

{
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

你如何清理这段内存?没有函数可以调用,也没有任何方式可以手动告诉 vector v 清理它的内存。一个解决方案是强制它超出范围(假设我正确使用了 swap):

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 cases 中。很多时候我需要在开关中创建一个临时变量:

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

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

关于c++ - 我应该明确地限定变量的范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16139720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com