'printf' vs. 'cout' in C++

后端 未结 16 1751
梦如初夏
梦如初夏 2020-11-22 07:04

What is the difference between printf() and cout in C++?

16条回答
  •  没有蜡笔的小新
    2020-11-22 07:36

    I would like say that extensibility lack of printf is not entirely true:
    In C, it is true. But in C, there are no real classes.
    In C++, it is possible to overload cast operator, so, overloading a char* operator and using printf like this:

    Foo bar;
    ...;
    printf("%s",bar);
    

    can be possible, if Foo overload the good operator. Or if you made a good method. In short, printf is as extensible as cout for me.

    Technical argument I can see for C++ streams (in general... not only cout.) are:

    • Typesafety. (And, by the way, if I want to print a single '\n' I use putchar('\n')... I will not use a nuke-bomb to kill an insect.).

    • Simpler to learn. (no "complicated" parameters to learn, just to use << and >> operators)

    • Work natively with std::string (for printf there is std::string::c_str(), but for scanf?)

    For printf I see:

    • Easier, or at least shorter (in term of characters written) complex formatting. Far more readable, for me (matter of taste I guess).

    • Better control of what the function made (Return how many characters where written and there is the %n formatter: "Nothing printed. The argument must be a pointer to a signed int, where the number of characters written so far is stored." (from printf - C++ Reference)

    • Better debugging possibilities. For same reason as last argument.

    My personal preferences go to printf (and scanf) functions, mainly because I love short lines, and because I don't think type problems on printing text are really hard to avoid. The only thing I deplore with C-style functions is that std::string is not supported. We have to go through a char* before giving it to printf (with the std::string::c_str() if we want to read, but how to write?)

提交回复
热议问题