C++ 常量变量和常量类型变量之间的差异

C++ 常量变量和常量类型变量之间的差异,c++,constants,C++,Constants,以下两者之间的区别是什么: const变量=10 及 const int变量=10 变量,按标准,当没有定义类型时,被解释为一个积分类型吗?< /P> < P> const变量=10 < /COD>不是有效的C++,而 const int变量=10;是 const variable=10唯一有效的时间(我能想到的)是,如果您有一个名为variable的类型,并且您有一个带有该类型未命名参数的函数,使用默认参数: typedef int variable; void foo(const vari

以下两者之间的区别是什么:

const变量=10

const int变量=10


变量,按标准,当没有定义类型时,被解释为一个积分类型吗?< /P> < P> <代码> const变量=10 < /COD>不是有效的C++,而<代码> const int变量=10;<代码>是

const variable=10
唯一有效的时间(我能想到的)是,如果您有一个名为
variable
的类型,并且您有一个带有该类型未命名参数的函数,使用默认参数:

typedef int variable;
void foo(const variable = 10);
没有严格的规则(K&R C等。编辑:即旧C),默认情况下int是类型。这当然并不意味着变量没有类型,也不意味着它与const有任何关系

const variable = 10;

不会编译在几乎所有的新的现代C++编译器中。

> P>这意味着X隐式声明为int。这在C++中是不允许的,但是在C中,为了保持与C标题或预ISO C++代码的兼容性,许多当代C++编译器仍然支持这一选项。 这里我的GCC4.4编译器在命令行上feed-fms扩展时摸索“const x=3;”(手册上说,它打开了理解MFC代码所需的几个指示灯)

更新:我已经用VS-2005检查过了,如果使用

#pragma warning(disable:4430)

隐式INT通常被皱眉(至少在我看来)。保罗隐式int在这种情况下不会发生。@尼尔:我假设他实际上是编译C而不是C++来标记(否则他的编译器有点损坏)。任何持有整数的类型都称为整型。@ Cuxel:您使用C还是C++?有一个不同。然后你有一个C++编译器,它默默地接受代码,这些代码实际上是非常旧的,过时的。如果你的C++编译器至少不发出一个警告:<代码> const变量=10 < /Cord>,那么你需要稍微提高你的警告级别,或者得到一个新的编译器。这表明您可能丢失了许多其他可能有用的警告和错误。@Changeling:gcc是最新的、免费的-为什么要使用旧的、不受支持的、非标准的编译器?@Paul:Ok。我们都是对的:-)隐式int被删除,编译器必须发出诊断,但是,“发出诊断后,实现可以选择假定隐式int并继续翻译程序,以支持利用此功能的现有源代码”(C99基本原理,同一节)。@changling。我是个挖沟工。我喜欢的工具是棍子。我知道它比较慢,而且挖沟也比较差,但我不能升级到铲子。我们定义的过程要求我们用棍子敲打沟槽的侧面,使其更平齐。我怎样才能用铲子把两边铲平?由两名软件工程师组成的团队是敏捷的定义。所以这不是政策让你退缩。你不应该忙着砍柴而不停地“磨锯子”。所以你不能太忙。害怕改变吗?问题是加标签的C++。K& R C(或者至少应该有)与它无关。许多新手混合C和C++…更严重的是,老C++是基于老C(我所说的):如果编译器不是最新的,它会在const和变量之间默默插入int。编辑:显然,即使在C99中也允许隐式整数。。。但是C++中的它必须是旧的。对,但是C++标准说隐式的int是不允许的。如果编译器在构建C++代码时甚至不发出警告,编译器或调用的方式有问题。@泰勒:我把警告级别提高到了所有,并且不抱怨。