什么是C++中的<<运算符?

Dux*_*cis 2 c++ function operators

我来自C#和Java背景到C++,我试图理解>>&<<运算符,如in

std::cout << "Hello World";
Run Code Online (Sandbox Code Playgroud)

我在这里无法理解的是<<运营商的用途.我尝试声明我自己的简单函数,它总是返回整数5,我可以像在C#中那样调用它,

int x = MyFunction();
Run Code Online (Sandbox Code Playgroud)

而转x5,但为什么我需要使用std::cout<<?此外,我真的很感激,如果你让我明白了什么都>><<是.

感谢大家帮助我理解这一点.实际打开我的想法是std :: cout是和对象的事实:)

Ben*_*ley 9

你没有完全拼写出来,但我相信你的困惑在于你认为这std::cout是一个功能,你想知道为什么你不这样称呼它:

std::cout("Hello World");
Run Code Online (Sandbox Code Playgroud)

好吧,std::cout不是功能.这个陈述中的函数是operator<<.

std::cout << "Hello World";
Run Code Online (Sandbox Code Playgroud)

或者,更具体地说,功能是std::ostream::operator<<(const char*).

你需要理解的是,运算符只是具有替代调用语法的函数. operator<<作为成员函数重载std::ostream,并且std::cout是其对象std::ostream.所以这:

std::cout << "Hello World";
Run Code Online (Sandbox Code Playgroud)

是另一种方式来调用它:

std::cout.operator<<("Hello World");
Run Code Online (Sandbox Code Playgroud)

注意,这operator<<是一个二元运算符,这意味着它需要两个参数,如果它被声明为自由函数,并且如果它被声明为成员函数则需要一个参数.当您使用替代调用语法时,左侧的对象是第一个参数,右侧的对象是第二个参数.在声明为成员函数的情况下,就像在这种情况下一样,左边的对象是调用对象,右边的对象是参数.

如果它被声明为自由函数,它会是什么样子:

operator<<(std::cout, "Hello World");
Run Code Online (Sandbox Code Playgroud)

但是,无论是声明为成员还是自由函数,您仍然可以使用相同的替代调用语法.