代码之家  ›  专栏  ›  技术社区  ›  Greg Treleaven

哪个更快,哪个更灵活:打印还是打印?[复制品]

  •  1
  • Greg Treleaven  · 技术社区  · 15 年前

    可能重复:
    printf vs cout in C++
    cin or printf??

    我一直在想关于printf和cout……哪一个最终更快,也是最灵活的(即可以打印一系列变量,输出可以格式化)?

    附笔。 我知道这个看起来像 'printf' vs. 'cout' in C++ 但我不是真的问同一件事。

    2 回复  |  直到 15 年前
        1
  •  7
  •   Community Mohan Dere    9 年前

    简短回答

    更快: printf

    更灵活: cout

    长回答

    当与SeaStFF家族相比,C++流被认为是较慢的(如果我记得一个特殊C++的项目,则是由Habor萨特)。不过,大多数情况下,您不需要这种速度,但您需要确保代码不会被窃听。

    而且,很容易对printf函数系列做一些错误的事情,比如参数的数量错误、类型错误,甚至在代码中引入潜在的安全漏洞(需要注意的是%n说明符)。

    除非真的想要它(然后,它被称为破坏),几乎不可能让它错误的C++流。它们无缝地处理所有已知类型(内置、std::strings等),并且很容易扩展。例如,假设我有一个对象“coordinate3d”,我想打印出它的数据:

    #include <iostream>
    
    struct Coordinate3D
    {
        int x ;
        int y ;
        int z ;
    } ;
    
    std::ostream & operator << (std::ostream & p_stream
                              , const Coordinate3D & p_c)
    {
        return p_stream << "{ x : " << p_c.x
                       << " , y : " << p_c.y
                       << " , z : " << p_c.z << " }" ;
    }
    
    int main(int argc, char * argv[])
    {
        Coordinate3D A = {25,42,77} ;
        std::cout << A << std::endl ;
              // will print "{ x : 25 , y : 42 , z : 77 }"
        return 0 ;
    }
    

    流的问题是,当想要指定某些数据的格式(例如,数字的填充空间)时,很难正确地处理这些数据,有时,您确实需要快速处理。然后,要么回落到PrimTf,要么尝试一些高速C++替代方案。 FastFormat 浮现在脑海中。

    编辑: 注意 Thomas “一系列测试显示了有趣的结果(我现在在电脑上复制了这些结果),即: 咳嗽 普林特 避免使用时有类似的性能 std::endl (除了输出 \n )

        2
  •  3
  •   Community Mohan Dere    9 年前
    • 更快:打印
    • 更安全和可扩展的类型:cout
    • 更好:看情况!我喜欢 printf 更多。

    I'm not alone 在思考C++的CUT做格式化的方法只是史诗失败。