当声明基元时,如果我使用赋值运算符或复制构造函数那么重要吗? 哪一个给出了最佳性能,或者今天大多数编译器都将这两个语句编译成相同的机器代码?
int i = 1;
int j( 1 );
答案 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};
......在效率方面无法超越。