【发布时间】:2014-01-11 10:31:20
【问题描述】:
编译此代码示例时
#include <stdio.h>
#include <stdlib.h>
int myfunc()
{
printf("Constructor\n");
return 1;
}
static const int dummy = myfunc();
int main()
{
printf("main\n");
return 0;
}
它在编译为 C++ 时可以工作,但不能作为 C 使用相同的编译器 (MingW gcc)。我在 C 模式下得到一个initializer element is not constant。
所以显然在静态初始化方面存在差异。有没有理由为什么 C++ 显然允许这样做,但 C 却不允许这样做?这是因为否则您将无法拥有带有构造函数的全局对象吗?
【问题讨论】:
-
C 应该尽可能简单。非静态初始化需要存在在调用
main()之前触发的启动/构造函数例程。显然,C++ 标准委员会可以接受这个要求,但 C 人不喜欢它(我可以理解)。 -
SO 应该仅限于技术问题,而不是基于意见的推测,为什么这个或那个特性存在于一种语言而不是另一种语言中。投票结束:许多好的问题会根据专家的经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或特定专业知识。
-
@JensGustedt,为什么这是基于意见的?我不认为标准是根据喜好改变的。我什至举了一个例子,为什么我认为有必要在 C++ 中允许这样做,所以我希望答案是技术原因。