使用类型推断声明变量是否与"classical way"变量名称后用括号初始化变量一样有效?

Is declaring variable with type inference as effective as "classical way" of initializing variable with parenthesis after variable name?

本文关键字:变量 初始化 有效 一样 变量名 声明 类型 是否 way classical      更新时间:2023-10-16

能够轻松地在我的代码库中短信搜索某些对象的构造函数。这是bellow的模式。而不是古典:

  1. Object val( a, b );

在任何地方都可以使用:

  1. auto val = Object( a, b );

这样,我可以使用简单的文本搜索"Object("并获取我正在调用Object构造函数的列表。它也不是句法的模棱两可,因此更容易制作简单的工具来自动化某些代码转换。它也优雅地避免了"最烦人的解析"问题。

我唯一关心的是可能对性能的影响。案例2)与案例1)一样快吗?(如果我们可以假设Object已启用了正确定义的移动构造函数和移动分配运算符和基本编译器优化。)

pre c 17,尽管不太可能,您可能会因额外的副本或移动而获得绩效罚款。即使C 98也允许实现此类副本,即使它们会产生副作用,而且几乎所有编译器已经实施了很长时间的优化,尤其是在优化的构建中。

帖子C -17,保证复制省略。您甚至不需要拥有副本或移动构造函数才能工作,因此您不应该看到任何区别。