我在函数内声明一个常量(一个包含字符串的大型结构常量),它只在这个函数中使用。 它对我的程序有任何执行时间影响吗? ' 它们将在每次调用函数时生成(需要更多时间)或仅创建一次,并且引用将在其生命周期中使用。 如果我在函数外部声明常量(全局),它的执行速度会更快吗?
答案 0 :(得分:1)
实际上,在函数内声明变量是一种很好的做法。如果该变量当然只用于该函数内部。两种方法之间没有任何性能差异,但是使全局不变可能需要更具创造性的命名方案,而函数内部的命名方案可能是通用的。毕竟,它仅用于该功能内部。
答案 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;
}
答案 2 :(得分: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;
}
答案 3 :(得分:1)
在Ada中,这取决于编译器。 (通常表现为。)
由于“常量”不是编译时静态的,因此每次声明常量时,编译器都可以执行安全操作并评估初始化表达式。
如果确实很重要,请衡量编译器的作用。