例如我想定义一个整数。我可以在 C++ 中以两种方式做到这一点:
int a = 10;
int a(10);
两者之间有什么区别还是只是口味问题?
例如我想定义一个整数。我可以在 C++ 中以两种方式做到这一点:
int a = 10;
int a(10);
两者之间有什么区别还是只是口味问题?
两者之间有什么区别还是只是口味问题?
只要您处理的是基本数据类型,例如int
,就没有区别。这只是一个偏好问题,我个人会选择第一种形式——但这只是我的口味。但是,在初始化类类型时可能会有所不同。
第一种形式称为复制初始化,它在概念上的工作原理是首先从初始化程序构造一个临时对象(假设有合适的转换序列可用),然后复制构造(或移动构造)从该临时声明的对象。
请注意,编译器可以按照C++11 标准的第 12.8/31 段执行复制省略,并将这种形式实际优化为直接初始化(参见下一段)。但是,如果这样做了,则必须仍然存在可行的复制构造函数或移动构造函数,以使初始化有效。
第二种形式称为直接初始化,它通过构造直接声明的对象并将初始化表达式作为参数传递给构造函数来工作。
对于基本类型(int、float、double、long、char 等),除了键入两个选项所需的字符数之外,编译器应该对两个选项执行完全相同的操作。所以从这个角度来看,这只是一个选择问题。
显然,您工作的公司、您志愿参与的开源项目或您正在接受教育的学校的风格指南可能会说其中一个比另一个更受欢迎。
原始类型没有区别。第一种称为复制初始化,而第二种称为直接初始化。在初始化类时使用谷歌查看这两种方法的不同之处。