根据我的理解,用c ++实例化一个整数是合法的:
int x = int(5);
作为一名Java程序员,我假设这行代码调用整数传递的构造函数" 5"作为一个论点。我读过虽然int不是一个类,因此没有构造函数。
那么,在那行代码中究竟发生了什么,以及通过这种方式初始化int之间的根本区别是什么:
int x = 5;
提前致谢!
答案 0 :(得分:11)
我读过虽然
int
不是一个类,因此没有构造函数。
是的,技术上built-in types have no constructor。
在该行代码中究竟发生了什么
整数文字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
阅读more about initializations以获取更精细的细节和差异。
答案 1 :(得分:2)
当涉及到类型时,C ++和java的工作方式不同。虽然java(据我所知)使用基本的内置类型和引用类型,但C ++使用不同类型的系统。
C ++内置类型包括基本类型(bool,字符类型,如char,整数类型,浮点类型和void)以及一些其他类型,如double&
或std::vector<std::sting>&&
等引用类型和指针类型。
除此之外,C ++还支持用户定义的类型(结构,类,枚举和枚举类)。标准库提供了许多用户定义的类型,例如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);