Primitive数据类型的构造函数

Constructors for Primitive data types

本文关键字:构造函数 数据类型 Primitive      更新时间:2023-10-16

是否

int i(10);

与相同

int i = 10 ;

这两种方法有什么不同?

引用标准(§8.5/14):

初始化的形式(使用括号或=)通常为无关紧要,但当初始化器或实体被初始化具有类类型;请参见下文。

因此,在您的情况下,没有区别("见下文"指的是复制初始化和直接初始化之间的区别,但正如我们所谈论的int,这在这里不感兴趣)。

这两者之间的区别之一:

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

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

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

而第二个可以是:

struct A
{
    int a = 10;
};

以及在任何其他地方,需要大括号或相等的初始值设定项(定义如下)。

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)

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

struct A
{
    int a{10};
};

这是一样的。

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.

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);
}
 }