本文主要是介绍C++标准库笔记:13.6 操控器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
操控器是什么
std::cout << std::endl;
此句代码中std::endl
为操控器,操控器是用来操控stream对象的,常常只会改变输入或格式化输出的解释方式。
std::cout << std::endl
:输出’\n’,并刷新output缓冲区std::cout << std::ends
:输出’\0’std::cout << std::flush
:刷新output缓冲区std::cin >> std::ws >> strTemp
: 读入并忽略空格
其中std::ws格外给个测试例子(^-^)
//ws是一次性的,执行了任意格式化io操作后,就恢复默认值 char strTemp[16] = { 0 };std::cin >> std::ws;while( std::cin.getline( strTemp, sizeof(strTemp) ) ){cout << strTemp << endl;std::cin >> std::ws;}
操控器运行原理
操控器是一个特定格式的函数,而stream以这个特定格式函数为参数重载了相应的格式操作符<< 、>>。如std::cout << std::endl;
,操作符执行时,碰到std::endl,则以参数std::endl调用相应的<<重载函数(此处叫操控器)。
operator<<实现代码片断:
_Myt& __CLR_OR_THIS_CALL operator<<(_Myt& (__cdecl *_Pfn)(_Myt&))
{ // call basic_ostream manipulator_DEBUG_POINTER(_Pfn);return ((*_Pfn)(*this));
}
endl的实现代码片断:
template<class _Elem,class _Traits> inlinebasic_ostream<_Elem, _Traits>&__CLRCALL_OR_CDECL endl(basic_ostream<_Elem, _Traits>& _Ostr)
{ // insert newline and flush stream_Ostr.put(_Ostr.widen('\n'));_Ostr.flush();return (_Ostr);
}
自定义操控器
知道了操控器的运行原理,只要按其格式写个函数就行,以下是个输出hello的操控器例子
template<class T, class traits>
inline basic_ostream<T, traits>& out_hello(basic_ostream<T, traits>& os )
{ char szTemp[] = "hello";os.write( szTemp, sizeof(szTemp) );return os;
}int main()
{cout << out_hello << endl;return 0;
}
这篇关于C++标准库笔记:13.6 操控器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!