【问题标题】:C++ Code Style - Best place to create objectsC++ 代码风格 - 创建对象的最佳场所
【发布时间】:2012-07-06 14:50:03
【问题描述】:

前几天我和我的朋友正在讨论哪种代码风格更好。

案例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
}

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

【问题讨论】:

  • 旁注,它们都是函数声明:一个名为 a 的函数,它不接受任何参数并返回一个 largeobject
  • 关于函数声明,您应该查看C++ FAQ Lite
  • 首先让它可读。无论哪种情况,编译器都会找到最佳的机器码。
  • 就可读性而言,这可能表明您需要两个功能。

标签: c++ performance coding-style readability


【解决方案1】:

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

考虑一下,如果您在函数体的顶部声明它,其他阅读您的代码的人可能会想知道您实际使用该对象的位置。因此,通过将声明放在您实际使用的位置附近将使其更易于阅读。

情况 A 和 B 之间不应该有任何巨大的性能差异。

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

如果您是编程新手,不妨考虑阅读 Scott Meyers 的书,Effective C++。第 26 条谈到它:尽可能推迟变量定义。

【讨论】:

  • 同意,但是具有完整方法/函数范围的对象应该直接进入函数/方法的开头
  • @BigMike 当然,因为它会在整个方法/函数中使用
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    案例 B 是最好的。这种情况在 S.Mcconnell book - Complete Code 中有解释。你错了:

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

    由于其他原因,案例 B 更好。

    【讨论】:

    • 我很好奇。你愿意提示一下这是什么原因吗?
    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多