【发布时间】:2019-02-22 16:11:58
【问题描述】:
我最近在尝试执行以下逻辑时遇到了一些麻烦:
static const int size = getSize();
int getSize() {
return 50;
}
我收到的错误是initialiser element is not constant
在线阅读后,我了解到这个问题是因为编译器在编译时评估 static const 表达式,因此无法知道该值应该是什么。
我的问题是如何解决这个问题?
如果我有一个包含许多函数但它们都需要这个逻辑的库,他们应该如何使用它而不必每次都计算它?
即使他们必须这样做,如果逻辑本身可以在整个运行时更改但我只想要从函数接收到的第一个值怎么办?
也许我应该澄清一下,getSize 中的逻辑只是一个示例,它还可以包含从特定文件中检索文件大小的逻辑。
【问题讨论】:
-
如果你不知道编译时的值,它不是一个常量,所以去掉 const 关键字。
-
还有“static const int size = getSize();”如果该行只是放在文件中,则永远不会编译。这不是 Python :) 你只能从其他函数调用函数。
-
@Fredrik 有没有办法确保没有 const 限定符就不能更改它?
-
在 C++ 中,您可以使用函数初始化全局变量。在 C 中,你不能。
-
顺便说一句:你写 它还可以包含从特定文件中检索文件大小的逻辑。:但它不再是一个常量......