原始数据类型的构造函数

时间:2014-09-13 11:05:12

标签: c++ constructor initialization

int i(10);

相同
int i = 10 ;

这两种方法有什么不同?

4 个答案:

答案 0 :(得分:2)

引用标准(§8.5/ 14):

  

初始化的形式(使用括号或=)通常是   无关紧要,但在初始化程序或实体时确实很重要   被初始化有一个类类型;见下文。

所以在你的情况下,没有区别(“见下文”是指复制初始化和直接初始化之间的区别,但正如我们所说的那样int,这里不感兴趣)

答案 1 :(得分:1)

这两者之间的区别之一:

/*1*/ int a(10);
/*2*/ int a = 10;

是第一个不能用作类内成员初始值设定项:

struct A
{
    int a(10); // compilation error
};

而第二个可以

struct A
{
    int a = 10;
};

以及在任何其他地方, brace-or-equal-initializer (在下面定义)所需的地方。

brace-or-equal-initializer:
    = initializer-clause
    braced-init-list

braced-init-list:
    { initializer-list ,opt }
    { }

参考:

  

§9.2类成员[class.mem]

     
      
  1. 大括号或等号初始化程序只能出现在数据成员的声明中。 (对于静态数据成员,请参见9.4.2;对于非静态数据成员,请参阅12.6.2)。
  2.   

这意味着可以替代地使用以下内容:

struct A
{
    int a{10};
};

答案 2 :(得分:0)

它是一样的。

int i = 10 // initializes memory  and loads with value 10.

int i(10) // does the same just writing style is different.It is like initializing a class of int.

答案 3 :(得分:-3)

int i(10);: - 这种减速是一种声明方法的错误方法。声明方法,方法名称和方法内使用的参数列表的返回类型所需的方法。 int i(10)是一种错误的减速方法。

int i = 10: - 表示i是一个具有10个值的int类型变量。两者的含义不同

从我们使用的构造函数初始化变量

class I {
int i;
i(int i) {
this.i=i;
}
psvm(string []m){
I i= new I(10);
}
 }