对象 cout 如何打印多个参数?

son*_*ony 4 c++ variadic-functions

printf()函数不同,它没有格式说明符,编译器会从那里猜测否。论据。那么在 cout 的情况下会发生什么?

Lig*_*ica 5

IOStreams 一次只接受一个参数,所以它工作得很好。:)

运算符重载的神奇之处在于:

std::cout << a << b << c;
Run Code Online (Sandbox Code Playgroud)

实际上是这样的:

std::operator<<(std::operator<<(std::operator<<(std::cout, a), b), c);
Run Code Online (Sandbox Code Playgroud)

或这个:

std::cout.operator<<(a).operator<<(b).operator<<(c);
Run Code Online (Sandbox Code Playgroud)

(取决于类型的ab并且c,无论是游离的功能成员函数将被调用。)

每个单独的调用都是对一个接受你给它的类型的重载。无需论证计数或格式字符串,因为他们是与你的单一调用printf