什么是运营商<< <>在C ++中?

时间:2010-06-10 01:00:22

标签: c++ templates operators operator-overloading

我已经在一些地方看到了这一点,为了确认我并不疯狂,我looked for other examples。显然,这也有其他风格,例如operator+ <>

然而,我在任何地方都没有提到它是什么,所以我想我会问。

google operator<< <>(并不是最简单的事情: - )

1 个答案:

答案 0 :(得分:13)

声明中的函数名称(包括运算符,如<>)之后的

operator<<表示它是函数模板特化。例如,使用普通的功能模板:

template <typename T>
void f(T x) { }

template<>
void f<>(int x) { } // specialization for T = int

(请注意,尖括号中可能包含模板参数,具体取决于函数模板的专用方式)

<>也可以在函数名之后用于调用函数,以便在存在非模板函数时显式调用函数模板,该模板函数通常在重载分辨率中更匹配:

template <typename T> 
void g(T x) { }   // (1)

void g(int x) { } // (2)

g(42);   // calls (2)
g<>(42); // calls (1)

因此,operator<< <>不是运营商。