是“MyClass a(anotherInstance);”比“MyClass a = anotherInstance;”更快?

时间:2011-12-26 09:29:11

标签: c++ constructor latency

我目前正在重新设计同事的代码。我觉得他经常使用像

这样的语法
double a(anotherDouble);  --- A

而不是

double a = anotherDouble;  --- B

我想知道他的语法是否更快,也许方法A可以保存构造函数操作?

有人可以在这里给出一点见解吗?

谢谢,度过了愉快的假期!

4 个答案:

答案 0 :(得分:1)

对于内置数据类型double,它们都是相同的,没有性能差异。

如果是自定义课程。
首先是直接初始化,第二个叫做复制初始化

好读:

<强> Is there a difference between copy initialization and direct-initialization

答案 1 :(得分:1)

对于double(或某种预定义类型),这无关紧要。我发现double pi=3.14;double pi(3.14);更具可读性,但这是一个品味问题。

对于用户定义的class C,编写C x = C(3);可能涉及用于初始化的构造函数和用于复制的另一个构造函数,但有时它由编译器优化。

答案 2 :(得分:1)

此处根本没有调用赋值运算符。 A a = b;总是调用构造函数。如果bA类型的对象,则调用copy-constructor。如果b是某个其他类型B的对象,则调用合适的构造函数,例如A( const B& )。在任何情况下,A a(b);A a = b;将使用相同的构造函数调用一次完全相同的代码。

以下将不会编译,因为没有合适的构造函数,即使类TB有合适的赋值运算符和默认构造函数:

#include <iostream>    

class TA
{
 public:
  TA()
  {
   std::cout << "TA()" << std::endl;
  }
  TA( const TA& )
  {
   std::cout << "TA(const TA&)" << std::endl;
  }
};

class TB
{
 public:
  TB()
  {
   std::cout << "TB()" << std::endl;
  }
  TB( const TB& )
  {
   std::cout << "TB(const TB&)" << std::endl;
  }
  TB& operator=( const TA& )
  {
   std::cout << "TB& operator=( const TA& )" << std::endl;
   return ( *this );
  }

};

int main( void )
{
 TA la;
 TB lb = la;

 return ( 0 );
}

所以你的问题的答案是“不,它不是更快,它是100%相同”

答案 3 :(得分:0)

double不是一个开始的课程。 但无论如何,我从来没有见过为这两个构造生成不同代码的编译器,即使是类,它们也会生成等效的代码,标准会明确说明。