【发布时间】:2020-09-15 10:37:22
【问题描述】:
简单的问题:
为什么下面的代码有效?
int main() {
const int a = 4;
const int b = 16;
const int size = b/a;
int arr[size] = {0,1,2,3};
return 0;
}
我认为静态数组的大小必须在编译时定义,因此只能使用“int”字面量。在上面的代码中,尽管大小是一个计算,但代码会编译。这个计算是在编译期间完成的吗?
如果是,可能我对编译和运行的理解是错误的:编译只是通过语法,将代码翻译成机器码,但不做任何计算……
谢谢!
【问题讨论】:
-
你可能对
constexpr:en.cppreference.com/w/cpp/language/constexpr和c++元编程:boost.org/doc/libs/1_61_0/libs/hana/doc/html/index.html感兴趣 -
是的,你对编译的理解是错误的。编译尝试尽可能多地进行优化,当然包括常量表达式的计算。
-
"用常量初始化的 const 整数可用于常量表达式" - 来自an answer to a question regarding floats。不过,它也间接回答了这个问题。
标签: c++ arrays compilation