我在函数内部声明了一个常量(一个包含字符串的大型结构常量),它仅在函数内部使用。 它会对我的程序有任何执行时间的影响吗? ' 每次调用函数时(需要更多时间)或者只有一次函数都会创建它们,并且参考将在整个生命周期中使用。 如果我在函数(全局)之外声明常量,执行速度会更快吗?常量声明全局函数或声明函数内部的区别
-1
A
回答
1
实际上,在函数内声明变量是一种很好的做法。如果该变量仅用于该函数的内部。这两种方法之间不会有任何性能差异,但使全局不变可能需要更具创造性的命名方案,而函数内部的方法可能是通用的。毕竟,它只能在该功能中使用。
1
只要使用命名空间,我会亲自将其移出函数体,如果任何其他相关函数使用该变量的话。
此外,如果它是一个真正的常量,我相信你可以声明一个struct static constexpr,这意味着它不会在每次调用函数时都分配到堆栈上(静态),即使你在功能体。这也意味着它可以在编译时使用,它会是(constexpr)。
#include <iostream>
namespace Test{
struct Test {
char name[11];
int a;
int b;
};
static constexpr Test TEST_CONSTEXPR = {
"test value",
5,
6
};
}
int main()
{
std::cout << Test::TEST_CONSTEXPR.name << std::endl;
std::cin.get();
return 0;
}
1
static struct
可以帮助您设置一次并完成它。这将来自数据段并在启动期间进行初始化。下面是一段粗俗而肮脏的代码,但会给你一些直觉。
#include <stdio.h>
struct A {
int a;
int b;
};
void func(void)
{
static struct A a = {5,3};
printf("FUNC: A.a: %d\n", a.a);
}
int main(int argc, char **argv)
{
static struct A a = {6,4};
printf("MAIN: A.a: %d\n", a.a);
func();
return 0;
}
1
在Ada这是依赖编译器。 (因为性能通常是这样。)
由于“常量”不是编译时静态的,因此编译器可以在每次声明常量时执行安全操作并评估初始化表达式。
如果真的很重要,请测量一下编译器的功能。
相关问题
- 1. 内部函数声明是否安全?
- 2. 如何从函数内部声明一个全局变量?
- 3. 从函数内部声明全局变量?
- 4. Javascript中的正常函数声明和内部返回块函数声明的区别
- 5. 在构造函数内部或外部声明变量之间的区别?
- 6. 全局函数的手写体声明
- 7. Javascript - 函数声明之间的区别
- 8. 斯卡拉:函数声明的区别
- 9. JavaScript函数声明之间的区别?
- 10. 外部函数局部声明
- 11. 类/全局函数声明C++
- 12. CoffeeScript声明并使用全局函数
- 13. 声明一个函数内部的全局对象(C++)
- 14. 声明一个函数内部创建的全局结构
- 15. C++函数声明常数变量
- 16. 无法声明全局变量外部函数
- 17. 函数声明
- 18. 声明函数
- 19. 声明函数
- 20. 函数内函数内声明
- 21. 函数级常量 - 在函数顶部声明?
- 22. 函数内声明函数的范围
- 23. JS函数声明:在参数声明
- 24. 函数或实例声明?
- 25. C隐式声明不同于内部函数声明
- 26. 函数声明或函数表达式
- 27. 函数的声明
- 28. 堆栈变量或函数声明
- 29. “隐式函数声明”与函数原始版本的区别
- 30. jQuery函数声明说明
问这个问题并用C++,C和Ada标记问题没有任何意义 - 它们是不同的语言,答案与例如: C或C++字符串文字(不需要运行时分配)和C++'std :: string(它们可以进行动态运行时分配)。因此,发布一种语言并向我们展示您关心的细节中的恶魔代码。 –