Primitive数据类型的构造函数
Constructors for Primitive data types
是否
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]
- 大括号或相等的初始值设定项应仅出现在数据成员的声明中。(静态数据成员见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);
}
}
相关文章:
- 具有默认模板类型的默认构造函数的类型推导
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 使用函数数据类型键入别名和别名模板
- 构造函数的类型是什么?
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++获取构造函数的类型
- 具有特定参数的特定构造函数的类型声明
- C 无可行的构造函数复制类型的变量
- 没有可行的构造函数复制类型 'MyString' 的数组元素
- 带有模板复制和移动构造函数的C++类型擦除
- 如何实例化没有默认构造函数的类型的 boost::fusion::vector 成员变量
- 创建类的所有构造函数的类型列表
- 提升::任何构造函数 - 常量类型重载分辨率
- 在 C++ 中使用构造函数进行类型转换不起作用?
- 如何创建一个LazyC++模板类来处理没有默认构造函数的类型
- C++类构造函数数据传递
- 返回构造函数的类型定义-如何修复此标头
- 为什么在c++ 11中将std::pair类标准更改为不允许只有非常量复制构造函数的类型?
- 如果给定模板参数,则使用sfinae启用构造函数提供类型定义
- SFINAE条件和构造函数参数类型