5

是否可以以十进制或八进制格式计算 thread::id?

std::cout << std::showbase;
cout << dec(or oct) << boost::this_thread::get_id() 

我总是得到十六进制,例如 0xdf08。

4

1 回答 1

7

您应该能够使用标准 I/O 操纵器指定所需的输出格式:

#include <iomanip>

// ...

std::cout << std::oct << boost::this_thread::get_id() << std::endl;
//           ^^^^^^^^
//           Octal

std::cout << std::dec << boost::this_thread::get_id() << std::endl;
//           ^^^^^^^^
//           Decimal

std::cout << std::hex << boost::this_thread::get_id() << std::endl;
//           ^^^^^^^^
//           Hexadecimal

但是,请注意 athread::id不需要是数字。此外,它可能是一个数字,但可能以不同于将该数字插入std::cout.

C++11 标准规范operator <<接受的重载std::thread::id(我假设它的行为类似于 Boost 对应的重载boost::thread::it),说:

[...]将 id的未指定文本表示out插入.

这意味着表示可能根本不是数字,在这种情况下,格式化操作符(如std::hex, std::dec, )std::oct可能对其没有任何影响。

于 2013-06-17T19:38:08.363 回答