定义数组时,数组下标要求的常量表达式,该怎么理解?

parachutes30 2014-05-17 12:48:56
int a=3;
const int b=a;
int c[b];

编译器还说需要常量表达式,这个b怎么不是常量表达式了,b不是已经恒等于3了吗?
...全文
1217 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanlvy 2014-05-19
  • 打赏
  • 举报
回复
你用啥编译器,就得按照啥编译器的规格来写
赵4老师 2014-05-19
  • 打赏
  • 举报
回复
编译器是人写的。 凡是人创造的东西都有缺陷。
lin5161678 2014-05-19
  • 打赏
  • 举报
回复
引用 11 楼 lming_08 的回复:
C++中const压根就不是表示常量,仅仅表示该变量是只读的!
C++ 的const表示常量 且 C++的const 可以用于定义数组长度
lin5161678 2014-05-19
  • 打赏
  • 举报
回复
引用 6 楼 ri_aje 的回复:
谁家的编译器啊? 应该可以编译才对。
C99 之前的C编译不行 C99 开始的C编译器 不要求 这个常量
shizhusz110 2014-05-19
  • 打赏
  • 举报
回复
b是常量是不确定的常量,照成大小不确定,编译器无法分配空间!
lming_08 2014-05-19
  • 打赏
  • 举报
回复
C++中const压根就不是表示常量,仅仅表示该变量是只读的!
jmcooler 2014-05-19
  • 打赏
  • 举报
回复
这里主要因为 a 是一个变量,虽然它已经赋值。编译器完全没有细节到在编译时,执行这个代码。 编译器只认定 a 是一个变量,就通不过编译。 而 cont int b,是在运行时,才赋值,一经赋值,就不可改变 综上所述,a 和 b 都是运行时才确定的,编译时,认定 a 是变量
jmcooler 2014-05-19
  • 打赏
  • 举报
回复
这个问题,各编译器可能会有不同的结果。 有的可以通过编译,有的不行
  • 打赏
  • 举报
回复
引用 5 楼 u010928112 的回复:
[quote=引用 2 楼 akirya 的回复:] 运行时才知道b=3,不是编译时.
那么编译时a是等于3吧?编译时只是让b等于a?[/quote] 编译时a真不是3,执行到int a=3时,a才等于3
赵4老师 2014-05-19
  • 打赏
  • 举报
回复
了解啥叫 编译期 运行期
ri_aje 2014-05-19
  • 打赏
  • 举报
回复
引用 7 楼 u010928112 的回复:
[quote=引用 6 楼 ri_aje 的回复:] 谁家的编译器啊? 应该可以编译才对。
VS2005[/quote] 试了,我的 vs2013 也不行。 发现是我搞错了,主楼的应该编译不了才对,因为 const int 不是编译期常量。
ri_aje 2014-05-19
  • 打赏
  • 举报
回复
引用 13 楼 lin5161678 的回复:
[quote=引用 6 楼 ri_aje 的回复:] 谁家的编译器啊? 应该可以编译才对。
C99 之前的C编译不行 C99 开始的C编译器 不要求 这个常量[/quote] 倒是也能这么解释,楼主没说清楚这个问题到底是按 c++ 考虑还是 c 考虑。
ri_aje 2014-05-18
  • 打赏
  • 举报
回复
谁家的编译器啊? 应该可以编译才对。
parachutes30 2014-05-18
  • 打赏
  • 举报
回复
引用 2 楼 akirya 的回复:
运行时才知道b=3,不是编译时.
那么编译时a是等于3吧?编译时只是让b等于a?
parachutes30 2014-05-18
  • 打赏
  • 举报
回复
引用 1 楼 wx7864566 的回复:
首先c是个b是个变量,编译时只是扫描源代码,此时b的数值还未被确定,请问编译器怎么知道b的数值.所以这是语法错误.
b不是个常量吗?编译时a等于3,b怎么就不给弄成3?
parachutes30 2014-05-18
  • 打赏
  • 举报
回复
引用 6 楼 ri_aje 的回复:
谁家的编译器啊? 应该可以编译才对。
VS2005
  • 打赏
  • 举报
回复
运行时才知道b=3,不是编译时.
「已注销」 2014-05-17
  • 打赏
  • 举报
回复
首先c是个b是个变量,编译时只是扫描源代码,此时b的数值还未被确定,请问编译器怎么知道b的数值.所以这是语法错误.
kevin1491 2014-05-17
  • 打赏
  • 举报
回复
定义const int b=3; 就能通过了

33,322

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧