如果int不是类,为什么int x = int(5)合法?

Tom*_*665 2 c++ primitive constructor initialization

根据我的理解,在c ++中实例化一个整数是合法的,如下所示:

int x = int(5);
Run Code Online (Sandbox Code Playgroud)

作为Java程序员,我假设这行代码调用传递"5"作为参数的整数的构造函数.我读过虽然int不是一个类,因此没有构造函数.

那么,在那行代码中究竟发生了什么,以及通过这种方式初始化int之间的根本区别是什么:

int x = 5;
Run Code Online (Sandbox Code Playgroud)

提前致谢!

leg*_*s2k 11

我读过虽然这int不是一个类,因此没有构造函数.

是的,技术上内置的类型没有构造函数.

在那行代码中究竟发生了什么

整数文字5显式地转换为int(主要是编译器的无操作)并分配给x.

初始化int的方式和方法之间的根本区别是什么 int x = 5;

基本上没有区别.在大多数情况下,所有以下表达式都是相同的,除非您是语言律师(例如,最后一个会阻止缩小,即如果值不能由类型表示则引发错误):

int x = 5;         // copy initialization
int y = int(5);    // cast and copy initialization
int z = (int)5;    // cast and copy initialization
int w(5);          // direct initialization
int r{5};          // direct initialization
Run Code Online (Sandbox Code Playgroud)

阅读有关初始化的更多信息,了解精细的细节和差异