初始化值如何在性能上与赋值进行比较?

时间:2010-08-07 17:30:24

标签: c++ performance

我读到了用户定义的类型,推迟变量的定义,直到合适的初始化程序可用,可以带来更好的性能。 为什么呢?

4 个答案:

答案 0 :(得分:3)

因为它意味着调用默认构造函数以外的构造函数。

X x; // Calls X()
x.Set(42);

X x(42); // Calls X(int)

答案 1 :(得分:3)

考虑一个字符串类。如果我们说:

string s;
....
s = "foobar";
然后我们必须在s的构造中做一些工作,然后或多或少地在作业中重复相同的工作。如果我们这样做:

string s( "foobar" );

我们只做一次工作。

话虽如此,在学习C ++时,你应该从不关注自己的性能问题 - 只考虑编写清晰易懂的代码。在这种情况下,使用值进行初始化也会胜出 - 如果变量始终初始化,则代码更清晰。

而BTW,这种语言称为C ++ - cpp是C预处理器。

答案 2 :(得分:1)

当正确的初始化数据可用时,您可以避免运行不必要的构造函数,然后执行Init调用。并且,如果代码路径永远不会到达初始化分支,则可以避免构造函数和析构函数一起使用,以及用于展开的异常处理状态设置。

答案 3 :(得分:1)

对于用户定义的类型,特别是构造函数和设置方法可能是任意复杂和耗时的。以史蒂文为例:

X x; // Calls X() 
x.Set(42); 

X x(42); // Calls X(int) 

... X :: X()和X :: Set()的实现可能 两者 非常耗时,那是< / em>为什么你读到后者可以有更好的表现。