Реализация boost :: барьера в C ++ 11

Оператор << на std::cout перегружен. Его поведение зависит от типа правильного операнда. (Это фактически несколько разных функций, все названы operator<<, компилятор решает, какой из них вызывать.)

Если вы дадите ему char* или const char*, он обрабатывает операнд как указатель на (первый символ) строки C-стиля и печатает содержимое этой строки:

const char * terry = "hello";
cout << terry; // prints "hello"

Если вы даете ему значение char, оно печатает это значение как символ:

cout << *terry;   // prints "h"
cout << terry[0]; // the same

Если вы указали ему указатель типа void*, он печатает это значение указателя (в определенном порядке реализации, обычно шестнадцатеричном):

cout << static_cast<const void*>(terry); // prints something like 0x4008e4

Обработка char* или const char* как указатель на строку C-стиля - это особый случай, и единственное, что я могу придумать, которое вызывает operator<< для печати чего-то другого, кроме значения операнда. Причина этого восходит к корням C ++ в C, который не имеет типа «string» и манипулирует строками с помощью указателей char*.

Существует множество других перегрузок для operator<<, для различных целочисленные и числовые типы с плавающей запятой, для std::string и т. д.

16
задан h4lc0n 28 June 2014 в 09:42
поделиться