这个问题可能更多地是关于 CPU/内存,而不是 C++ 语言本身。
我在class B
下面提供了一个。
class B {
public:
B(int num): num_(num), a(num_){}
private:
int num_;
A a;
};
在 的构造函数中B
,对象a
被初始化为num_
而不是num
。我本可以写这个class B_Alternative
。
class B_Alternative {
public:
B_Alternative(int num) : num_(num), a(num) {}
private:
int num_;
A a;
};
哪个更快?我的理解是,答案可能取决于B
存储的位置。如果B
在堆栈上,那么编译器可能会直接num_
从中检索,B
并且没有速度损失。如果B
是 在堆上,则需要制作一个堆栈帧来构造a
,并将 的副本num_
移动到堆栈以运行A
的构造函数。然后num_
将被移回堆中的位置a
。这将导致无论存储在哪里B
,构造函数都比构造函数慢。B_Alternative
B_Alternative
A
下面包括一个示例。这只是一个例子。
class A {
public:
A(int num) : num_(num) {}
private:
int num_;
};