初始化基本类型时哪个更有效?

时间:2009-06-18 16:56:45

标签: c++ performance

当声明基元时,如果我使用赋值运算符或复制构造函数那么重要吗? 哪一个给出了最佳性能,或者今天大多数编译器都将这两个语句编译成相同的机器代码?

int i = 1;
int j( 1 );

5 个答案:

答案 0 :(得分:4)

同样的:

  int i = 1;
  int j( 1 );

不适用于:

  Cat d;
  Cat c1;
  c1 = d;
  Cat c2(d);//<-- more efficient

答案 1 :(得分:3)

我很确定它们是相同的,但是如果你进行静态初始化,在运行时没有初始化,那么值就会内置到二进制文件中。

static int i = 1;

但是,考虑到关键字static的含义,这并不总是合适的。

答案 2 :(得分:2)

我认为两者都会编译相同;只需使用您认为最易阅读的人和其他可能阅读您代码的人。

答案 3 :(得分:0)

一般来说,这个问题无法回答。对于原始类型,一个好的编译器会将它们减少到相同的汇编指令,但是对于用户定义的类型(也就是类),你将受到编写复制和赋值运算符的人的支配。我已经看到代码中的一个比另一个快一个数量级的代码,因为编写复制构造函数的人与编写赋值运算符的人不一样 - 其中一个人聪明地做了一个他们没有。

答案 4 :(得分:0)

在单一基元类型的情况下,它并不重要。

当重要的是你有一个原始类型的集合。换句话说,POD。在这种情况下,没有更有效的方法来实例化它,通过使用聚合初始化器语法:

struct POD
{  
  int n;
  double d;
  bool b;
};

如果这是您的POD,那么:

POD pod = {1, 3.14, true};  

......在效率方面无法超越。