【发布时间】:2020-03-15 23:39:50
【问题描述】:
看下面的代码:
#include <iostream>
int main(void) {
int number1 = 4;
double salary[number1];
return 0;
}
虽然可以编译成功,但应该认为是错误的,因为number1是非const变量。
#include <iostream>
int main(void) {
int number1 = 4;
const unsigned number2 = number1;
double salary[number2];
return 0;
}
现在 number2 是一个 const 变量。
也编译成功了。
我觉得这是错误的,或者至少不是好的做法。
但我无法解释为什么。
有人能解释一下为什么错了吗?
【问题讨论】:
-
这些都不会在符合标准的编译器中编译。
-
C 和 C++ 是系统底层物理架构的编译语言。像
int和const(尤其是后者)这样的类型和限定符是为了帮助人类程序员而创建的。所以如果你觉得它没有表达你想要的意思,那么千万不要使用那种语法。从这个意义上说,它可以被认为是“不好的做法”旁注:考虑函数alloca。 -
我觉得这是一个完美的骗局stackoverflow.com/a/34696833/2805305,除了这个q还询问
C。尽管如此,请在那里阅读我的回答,因为它完全符合您的问题。 -
以后,请在不同的问题中提出不同的问题(包括涉及不同语言的相同问题)。
-
C 和 C++ 是不同的语言,它们都有自己独特的规范,这些规范随着时间的推移而发展——根据语言和规范,可能会定义或不定义您想要的数组。此外,仅仅因为您觉得它是错误的,这并不意味着它是不好的做法——某些硬件可能恰好适合您感觉“错误”的那种构造。所以没有人能解释为什么它是错的,因为它可以说是没有[错的]。反过来也是正确的——它不是“正确的”——它只是可能被允许的,并且需要根据具体情况评估影响。