2012-07-06 73 views
3

我和朋友在前几天讨论哪种代码更好。C++代码样式 - 创建对象的最佳位置

方案A:

int function() 
{ 
    largeobject a; 
    //do some stuff without a 
    //do some stuff with a 
} 

案例B:

int function() 
{ 
    //do some stuff without a 
    largeobject a; 
    //do some stuff with a 
} 

所以它的代码是在速度和可读性的长期更好。

+4

注意,它们都是函数声明:一个名为'a'的函数,它不接受任何参数并返回一个'largeobject'。 – hmjd 2012-07-06 14:53:36

+0

关于函数声明,您应该查看[C++ FAQ Lite](http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.2) – maba 2012-07-06 14:56:30

+3

首先使其可读。无论哪种情况,编译器都会找到最优的机器码。 – tenfour 2012-07-06 14:57:02

回答

10

您应该尽可能在本地声明变量/对象的实例。所以,在这种情况下,B是最好的选择。

请考虑如果您在函数体的顶部声明它,其他人阅读您的代码时可能会怀疑您实际使用该对象的位置。因此,通过使声明接近您实际使用的位置,将使其更易于阅读。

不应该有情况A和B之间

任何巨大的性能差异

有一些特殊情况,如分配的内存或例如一个线程池大块。在这些情况下,由于可能需要时间和资源消耗,你可能需要找到一个更好的地方来分配它们。

如果您还不熟悉编程,您可能需要考虑阅读Scott Meyers的书籍,Effective C++。第26项谈到:尽可能推迟变量定义。

+2

同意,但具有完整的方法/函数范围的对象应该直接到函数/方法的开头 – BigMike 2012-07-06 14:55:01

+2

@BigMike当然,因为它将在整个方法/函数 – ALOToverflow 2012-07-06 14:58:48

2

您应该使用案例B.在您需要之前不需要创建对象。

另外,编译器不会将largeobject a();解释为使用默认构造函数创建对象,而是将其作为函数声明创建。这被称为“最令人头疼的解析”。

+0

期间使用谢谢,我编辑了它 – Caesar 2012-07-06 15:20:34

0

案例B是最好的。这种情况在S.Mcconnell的书中有解释 - 完整的代码。而你错了:

那么哪个代码在速度和可读性方面更好。

由于其他原因,情况B更好。

+0

我'好奇。你想知道是什么原因吗? – kratenko 2012-07-06 15:11:48