POCO C++库学习和分析 -- 流 (一) (二)

2014-11-24 02:39:42 · 作者: · 浏览: 4
ios::basefield ); // set hex as the basefield
std::cout.setf ( std::ios::showbase ); // activate showbase
std::cout << 100 << '\n';
std::cout.unsetf ( std::ios::showbase ); // deactivate showbase
std::cout << 100 << '\n';
return 0;
}

// modifying flags with setf/unsetf
#include // std::cout, std::ios

int main () {
std::cout.setf ( std::ios::hex, std::ios::basefield ); // set hex as the basefield
std::cout.setf ( std::ios::showbase ); // activate showbase
std::cout << 100 << '\n';
std::cout.unsetf ( std::ios::showbase ); // deactivate showbase
std::cout << 100 << '\n';
return 0;
}输出:
0x64
64


4. 读取/设置显示浮点数时的精度
[cpp]
streamsize precision() const;
streamsize precision (streamsize prec);

streamsize precision() const;
streamsize precision (streamsize prec); 例子:
[cpp]
// modify precision
#include // std::cout, std::ios

int main () {
double f = 3.14159;
std::cout.unsetf ( std::ios::floatfield ); // floatfield not set
std::cout.precision(5);
std::cout << f << '\n';
std::cout.precision(10);
std::cout << f << '\n';
std::cout.setf( std::ios::fixed, std:: ios::floatfield ); // floatfield set to fixed
std::cout << f << '\n';
return 0;
}

// modify precision
#include // std::cout, std::ios

int main () {
double f = 3.14159;
std::cout.unsetf ( std::ios::floatfield ); // floatfield not set
std::cout.precision(5);
std::cout << f << '\n';
std::cout.precision(10);
std::cout << f << '\n';
std::cout.setf( std::ios::fixed, std:: ios::floatfield ); // floatfield set to fixed
std::cout << f << '\n';
return 0;
}输出:
3.1416
3.14159
3.1415900000


5. 读取/设定流的输出数据的显示宽度
[cpp]
streamsize width() const;
streamsize width (streamsize wide);

streamsize width() const;
streamsize width (streamsize wide); 例子:
[cpp]
// field width
#include // std::cout, std::left

int main () {
std::cout << 100 << '\n';
std::cout.width(10);
std::cout << 100 << '\n';
std::cout.fill('x');
std::cout.width(15);
std::cout << std::left << 100 << '\n';
return 0;
}

// field width
#include // std::cout, std::left

int main () {
std::cout << 100 << '\n';
std::cout.width(10);
std::cout << 100 << '\n';
std::cout.fill('x');
std::cout.width(15);
std::cout << std::left << 100 << '\n';
return 0;
}输出:
100
100
100xxxxxxxxxxxx


语言环境:
1. 给流设置本地语言环境
[cpp]
locale imbue (const locale& loc);

locale imbue (const locale& loc); 例子:
[cpp]
// imbue example
#include // std::cout
#include // std::locale

int main()
{
std::locale mylocale(""); // get global locale
std::cout.imbue(mylocale); // imbue global locale
std::cout << 3.14159 << '\n';
return 0;
}

// imbue example
#include // std::cout
#include // std::locale

int main()
{
std::locale mylocale(""); // get global locale
std::cout.imbue(mylocale); // imbue global locale
std::cout << 3.14159 << '\n';
return 0;
}输出:

3,14159


2. 获取当前使用语言环境
[cpp] locale getloc() const;

locale getloc() const;


1.2 basic_ios
basic_ios定义出“与字符类型及其相应字符特性相关”的stream class的共同属性,其中包括清除流状态、设置流状态、拷贝流标志、返回或设置流缓冲区指针、设置本地化相关信息、返回或设置填充字符、字符转换,还包括了stream所用的缓冲器.
basic_ios在其内部定义了一个指向streambuf的指针。
[cpp] template
class basic_ios
: public ios_base
{
//C++标准库封装了一个缓冲区类streambuf,以供输入输出流对象使用。
//每个标准C++输出输出流对象都包含一个指向streambuf的指针,
basic_streambuf<_Elem, _Traits>*_Mystrbuf;


// ....
}

template
class basic_ios
: public ios_base
{
//C++标准库封装了一个缓冲区