使用const进行多维数组初始化

时间:2015-01-26 09:37:50

标签: c

这种初始化工作

int arr[3][4] = { {1,2,3,4}, {1,2,3,4}, {1,2,3,4} } ;  

但这里没有

const size_t row_size = 3;  
const size_t col_size = 4;  

int arr[row_size][col_size] = { {1,2,3,4},{1,2,3,4},{1,2,3,4}};  

这些代码在c中但是在将文件扩展名更改为c ++并重新编译之后 它工作正常。为什么这样的行为?

2 个答案:

答案 0 :(得分:0)

曾经是C和宏的问题被用来解决这些问题。但是在C ++中,如果使用“const”关键字,那么编译器应该在编译期间自动替换这些值,因此g ++应该没有任何问题。使用g ++编译时,该代码运行完全正常。也许你正在尝试用gcc编译它(我得到了与gcc相同的错误,这是预期的)。

答案 1 :(得分:0)

实际上,拥有const - 变量并不意味着它在编译时是常量。例如,我可以

void f(int x) {
    const int y = x;
    int m[y]; // should that work?
}

它不适用于旧的C ++ 03,因为编译器无法在编译时确定y。虽然很快就可以在C ++中使用名为Variable Length Arrays的功能,但是你想要的只是普通的编译时常量。只是说它也是static

static const int size_t row_size = 3;

从现在开始,您可以在编译时使用它。