可能重复:
Is there a difference in C++ between copy initialization and direct initialization?
之间有什么区别,
int x(5);
int x = 5;
&安培;有什么区别,
int const x(5);
const int x(5);
答案 0 :(得分:4)
在您显示的4行中,只有1行是有效的C.
int x(5); /* INVALID C */
int x = 5;
int const x(5); /* INVALID C */
const int x(5); /* INVALID C */
我不知道其他语言中无效行的含义。在C中,有效行的含义是创建名为x
,类型为int
和值为5
的对象。
要定义“const”(更好:“只读”)对象,C语法是
const int x = 5;
int const x = 5;
但x
不能用于只允许常量的地方。 x
不是常数:它是const int
#define CONSTANT 42
enum /*unnamed*/ { First=1, Second, Third };
switch (var) {
case x: break; /* invalid use of x; only constants allowed in case labels */
case 15: break; /* ok; 15 is a constant */
case CONSTANT: break; /* ok; CONSTANT is a constant with value 42 */
case Second: break; /* ok; Second is a constant with value 2 */
}
答案 1 :(得分:2)
首先,内置类型没有区别。对于类类型,T x = y
表示法需要复制构造函数,T x(y)
表示法不需要。{1}}表示法。 编辑:另外,正如其中一位评论者指出的那样,如果T x = y
构造函数被声明为T(y)
,则explicit
将无效。
对于第二种,就编译器而言没有区别,但第二种(const int
)在许多情况下会导致混淆,尤其是涉及typedef
时,例如:< / p>
typedef int* IntPtr;
IntPtr const cpi1; // Const pointer to a non-const int.
const IntPtr cpi2; // Also a const pointer to a non-const int.
在两个定义中,const
适用于指针。
由于这种混淆,将const
置于其修改之后通常被认为是更好的做法。现在 - 很长一段时间,将const
置于开头是很平常的,结果是这种做法很普遍。
答案 2 :(得分:2)
关于const
的一个非常好的经验法则:
从右到左阅读声明。
(参见Vandevoorde / Josutiss“C ++模板:完整指南”)
例如:
int const x; // x is a constant int
const int x; // x is an int which is const
// easy. the rule becomes really useful in the following:
int const * const p; // p is const-pointer to const-int
int const &p; // p is a reference to const-int
int * const * p; // p is a pointer to const-pointer to int.
自从我遵循这个经验法则后,我再也没有误解过这样的声明。
(:sisab retcarahc-rep a no ton,sisab nekot-rep a tfel-ot-thgir naem I hguohT:tidE
答案 3 :(得分:1)
在使用参数之前,两者都不完全相同。这只是编码风格的问题。
[注意:但是以下不一样:
int x; // x is variable
int x(); // x is function declaration
答案 4 :(得分:1)
关于const
关键字:
因此,int const i
和const int i
是相同的。
但是,int *const i
和const int *i
不相同:在第一个表达式中,指针是常量,在第二个表达式中,指向的整数是常量。 Als int const* i
相当于第二个。
答案 5 :(得分:0)
没有区别。将变量初始化为值的替代方法。
但是你在你的系统上尝试过这个吗?你得到了什么?
答案 6 :(得分:0)
c ++中没有区别,但是 - int x(5);
是不允许的
答案 7 :(得分:-1)
int x(5);
int x = 5;
没有区别。
int const x(5);
const int x(5);
没有区别。
int x = 5;
const int *p = &x;
int *const q = &x;
以下是p
和q
的区别。使用p
您无法更改x
的值,但您可以为p
分配新地址。使用q
,您无法指向任何其他内存位置,但您可以使用x
修改q
。