我读到了用户定义的类型,推迟变量的定义,直到合适的初始化程序可用,可以带来更好的性能。 为什么呢?
答案 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>为什么你读到后者可以有更好的表现。