局部变量的声明实际上会重复很多次吗?
Will this declaration of local variables atually repeat many times?
我听说我们应该使变量尽可能地本地化,我同意。考虑以下代码:
int main() {
for(int i = 0; i<5; ++i) {
int temp;
std::cin >> temp;
std::cout << temp << std::endl;
}
return 0
}
temp
是for
循环的局部变量。但是,我担心在每个循环中声明temp
,因此使程序运行速度变慢。避免这种情况并在for
循环之外声明temp
会更好吗?
int main() {
int temp;
for(int i = 0; i<5; ++i) {
std::cin >> temp;
std::cout << temp << std::endl;
}
return 0
}
这对速度没有任何影响,除了在后一种情况下您将temp
放在堆栈上的时间更长。
我更喜欢第一个,因为它是一个很好的做法,尽量减少变量的范围。
首先,始终以清晰为第一,以速度为第二。其次,在你有测量结果表明它有帮助之前,不要将清晰度与速度联系在一起。
声明变量是在编译时发生的事情。在运行时发生的是初始化,是的,如果你在循环中声明temp
,它将在每次循环中被初始化。如果temp
的初始化成本很高,那么这一点很重要。然而,对于没有初始化式的int类型,代价是 0 ;
这真的是个人喜好的问题。在for循环中声明temp
不会对速度产生影响。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 在基于范围的for循环中使用结构化绑定声明
- 在将变量声明为引用时,堆在释放后使用
- C++:无法访问声明的受保护成员
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 在函数内部的声明中初始化数组,并在外部使用它
- 声明是否无效()合法,它实际上是什么?
- 在 C++ 中声明内联但实际上不是内联函数是否合法