如果 int 不是 class,为什么 int x = int(5) 是合法的?
Why is int x = int(5) legal if int is not a class?
据我了解,像这样在 C++ 中实例化整数是合法的:
int x = int(5);
作为一名 Java 程序员,我会假设这行代码调用传递“5”作为参数的整数的构造函数。我读到 int 不是 class 因此没有构造函数。
那么,在那行代码中到底发生了什么,以这种方式初始化 int 和这样初始化 int 的根本区别是什么:
int x = 5;
提前致谢!
I read though that int
is not a class and thus has no constructor.
是的,技术上 built-in types have no constructor。
what does exactly happen in that line of code
整数文字 5
被显式转换为 int
(主要是编译器的空操作)并分配给 x
.
what is the fundamental difference between initialising the int that way and 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
阅读 more about initializations 了解更详细的信息和差异。
C++ 和 java 在类型方面的工作方式不同。 java(据我所知)使用基本的内置类型和引用类型,而 C++ 使用不同的类型系统。
C++ 内置类型包括基本类型(bool、char 等字符类型、整数类型、浮点类型和 void)以及一些其他类型,例如 double&
或 [=12 等引用类型=] 和指针类型。
除此之外,C++ 还支持用户定义的类型(结构、classes、枚举和枚举 class)。标准库提供了许多用户定义的类型,例如 std::string。
事实证明 int a(5);
表示法不只为用户定义的类型保留,语言支持这种方式的值初始化。在 C++11 中,int a{5};
也是合法的
现在关于赋值:
int a; //declaration
a=5; //assignment
int b(5); //declaration+initialization
int c=5; //declaration+initialization (NO assignment)
如果一个变量没有声明,没有赋值,编译器解析int c=5;
就像int c(5);
据我了解,像这样在 C++ 中实例化整数是合法的:
int x = int(5);
作为一名 Java 程序员,我会假设这行代码调用传递“5”作为参数的整数的构造函数。我读到 int 不是 class 因此没有构造函数。
那么,在那行代码中到底发生了什么,以这种方式初始化 int 和这样初始化 int 的根本区别是什么:
int x = 5;
提前致谢!
I read though that
int
is not a class and thus has no constructor.
是的,技术上 built-in types have no constructor。
what does exactly happen in that line of code
整数文字 5
被显式转换为 int
(主要是编译器的空操作)并分配给 x
.
what is the fundamental difference between initialising the int that way and
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
阅读 more about initializations 了解更详细的信息和差异。
C++ 和 java 在类型方面的工作方式不同。 java(据我所知)使用基本的内置类型和引用类型,而 C++ 使用不同的类型系统。
C++ 内置类型包括基本类型(bool、char 等字符类型、整数类型、浮点类型和 void)以及一些其他类型,例如 double&
或 [=12 等引用类型=] 和指针类型。
除此之外,C++ 还支持用户定义的类型(结构、classes、枚举和枚举 class)。标准库提供了许多用户定义的类型,例如 std::string。
事实证明 int a(5);
表示法不只为用户定义的类型保留,语言支持这种方式的值初始化。在 C++11 中,int a{5};
现在关于赋值:
int a; //declaration
a=5; //assignment
int b(5); //declaration+initialization
int c=5; //declaration+initialization (NO assignment)
如果一个变量没有声明,没有赋值,编译器解析int c=5;
就像int c(5);