gpt4 book ai didi

c - C 中的 const 修饰符

转载 作者:太空狗 更新时间:2023-10-29 14:52:51 26 4
gpt4 key购买 nike

由于无法使用以下初始化模式创建数组,回到 C 时我常常感到困惑...

const int SOME_ARRAY_SIZE = 6;
const int myArray[SOME_ARRAY_SIZE];

我对这个问题的理解是 const 运算符不保证常量性,而只是断言 SOME_ARRAY_SIZE 指向的值在运行时不会改变。但是为什么编译器不能假定该值在编译时是常量呢?它在源代码中说 6...

我认为我在对 C 的基本理解中遗漏了一些核心内容。有人可以帮助我。 :)

[更新]在阅读了更多有关 C99 和可变长度数组的内容后,我想我对此理解得更好了。我试图创建的是一个可变长度数组 - const 不会创建编译时常量,而是创建运行时常量。因此我正在初始化一个可变长度数组,它只在 C99 中的函数/ block 范围内有效。文件范围内的可变长度数组是不可能的,因为编译器无法将固定的内存地址分配给无界数组。[/UPDATE]

最佳答案

嗯,在 C++ 中语义有点不同。在 C++ 中,您的代码可以正常工作。您必须区分两件事,constconstant expression。正如您所描述的,Const 意味着该值是只读的。另一方面,常量表达式表示该值是编译时已知的,并且是编译时常量。 C 中 const 的语义总是第一类型。 C 中唯一的常量表达式是文字,这就是为什么 #define 用于此类事情的原因。

然而,在 C++ 中,任何用常量表达式初始化的 const 对象本身就是一个常量表达式。

我不知道为什么在 C 中会这样,它就是这样

关于c - C 中的 const 修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5497513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com