代码之家  ›  专栏  ›  技术社区  ›  Kiril Kirov

C++风格与性能?

  •  27
  • Kiril Kirov  · 技术社区  · 14 年前

    C++风格与性能-是使用C风格的东西,那是更快的一些C++等价物,那是坏的实践吗?例如:

    • 不要使用 atoi() , itoa() , atol() 等等!使用 std::stringstream &可能有时候会更好,但总是这样?使用C函数有什么不好?是的,C风格,不是C++,而是什么?这是C++,我们一直在寻找性能。

    • 永远不要使用原始指针,而是使用智能指针-好吧,它们真的很有用,每个人都知道,我知道,我一直都在使用它们,我知道它们比原始指针更好,但有时使用原始指针是完全安全的。为什么不呢?”不是C++风格吗?&够了吗?

    • 不要使用位操作-太C样式?WTH?当你确定自己在做什么时,为什么不呢?例如-不要按位交换变量( a ^= b; b ^= a; a ^= b; )-使用标准的三步交换。不要用左移位乘二。等等。(好,这不是C++风格与C风格,但仍然不是很好的练习)

    • 最后,最昂贵的——“不要使用枚举S返回代码,它太C风格,使用不同错误的异常”?为什么?好吧,当我们谈论深层次的错误处理时——好吧,但为什么总是这样?例如,这有什么问题-当我们谈论一个函数时,它返回不同的错误代码 当错误处理只在函数中实现时,调用第一个函数 ?我的意思是-不需要在高层传递错误代码。例外是相当缓慢的, 例外情况 对于特殊情况,而不是……美女。

    • 等等等等。

    好吧,我知道好的编码方式是 非常非常重要 <-代码应该易于阅读和理解。我知道没有必要进行微观优化,因为现代编译器非常聪明。 Compiler optimizations 非常强大。但我也知道 exceptions handling ,如何实现(某些)智能指针,并且始终不需要智能指针。我知道,例如, atoi 那不是“安全”吗? 标准::字符串流 是,但仍然……那表演呢?


    编辑 我不是说一些很难的事情,只是C风格的。我的意思是——不要怀疑使用函数指针或虚拟方法和这些东西,C++程序员可能不知道,如果从来没有使用过这样的东西(C程序员总是这样做)。我说的是一些更常见和简单的事情,比如在例子中。

    10 回复  |  直到 13 年前
        1
  •  46
  •   Stack Overflow is garbage    14 年前

    std::unique_ptr boost::scoped_ptr

    shared_ptr

    仍然 比比特黑客更快,比特移动代替了乘法 仍然 如果编译器有效并且速度更快,则由它完成。

    但是作为一个程序员,您应该只对一件事情使用位操作:对整数进行位操作。你已经有了一个乘法运算符,所以使用 那个 当你想乘的时候。你还有一个 std::swap 功能。如果要交换两个值,请使用该选项。优化时最重要的技巧之一是,也许令人惊讶的是,编写可读、有意义的代码。这允许编译器理解代码并对其进行优化。 STD::掉期 可以专门为它所使用的特定类型进行最有效的交换。编译器知道几种实现乘法的方法,并且会根据情况选择最快的方法…如果你告诉我。如果你告诉它改为比特移位,你只是在误导它。告诉它乘法,它会给你最快的乘法。

    最后,最昂贵的——“不要使用枚举S返回代码,它太C风格,使用不同错误的异常”?

    取决于你问谁。我所知道的大多数C++程序员都为两者找到了空间。但请记住,返回代码的一个不幸之处是它们很容易被忽略。如果这是不可接受的,那么在这种情况下,您可能更喜欢例外。另一点是,RAII与异常一起工作得更好,C++程序员也能更好地工作。 应该是肯定的

    std::stringstream

    stringstream

        2
  •  14
  •   Jerry Coffin    14 年前
    1. atoi atol stringstream strtol

        3
  •  9
  •   Armen Tsirunyan    14 年前

    • x << 3; x * 8

        4
  •  3
  •   icecrime    14 年前
        5
  •  3
  •   Mike Dunlavey    14 年前
    1. char* char wchar_t basic_string lexical_cast atoi itoa
    2. swap
        6
  •  2
  •   onemasse    14 年前

        7
  •  2
  •   Community CDub    7 年前
        8
  •  1
  •   Philipp    14 年前

        9
  •  1
  •   facetus    14 年前

        10
  •  1
  •   Johan Kotlinski    14 年前