以下行声明int
恰好被调用cout
(它不是std::cout
流)
int cout = 5;
该<<
运营商peforms有点转变.
所以
cout << cout;
仅执行一次移位而不存储结果.
澄清一下,看看下面的程序:
#includeint main() { int cout = 5; auto shiftedval = cout << cout; std::cout << "cout's value is " << cout << ", and the result of the bit shift is " << shiftedval << '\n'; return 0; }
它将输出:
cout's value is 5, and the result of the bit shift is 160
幕后发生的事情是,operator<<
已经超载以占据ostream
左侧.
通过包含iostream
你得到这个函数,编译器将知道你的意思,如果你有一个ostream
在<<
运算符的左边.
如果没有库,<<
那只会是一个按位移位运算符.
还要注意的是,如果你有不良深思熟虑包含using namespace std;
或using std::cout
再cout
那么将意味着ostream
和<<
将触发到库的调用operator<<
函数.如果在添加using
上面的声明之后包含cout
新声明的名称的另一个声明将隐藏先前的声明,cout
现在将int
再次被视为一个声明,我们将回到正在使用的位移运算符功能.
例:
#includeusing namespace std; // using std:: at global scope int main() { int cout = 5; auto shiftedval = cout << cout; //the following will not compile, cout is an int: cout << "cout's value is " << cout << ", and the result of the bit shift is " << shiftedval << '\n'; //but we can get the cout from the global scope and the following will compile ::cout << "cout's value is " << cout << ", and the result of the bit shift is " << shiftedval << '\n'; return 0; }