[英]Why does this code compile? cout < “tt”;
cout
是类ostream
对象, ostream
是basic_ostream
typedef:
extern ostream cout;
typedef basic_ostream<char> ostream;
template <class charT, class traits = char_traits<charT> >
class basic_ostream;
但这些类都没有operator<
所以我无法理解为什么这段代码编译没有任何错误:
std::cout < "aaa";
在C ++语言中,运算符<
使编译器考虑表单的内置候选函数
bool operator<(T, T);
对于每个可能的指针类型T
特别是,这意味着void *
类型具有这样的功能。 这是适用于您的情况的功能。 字符串文字可以隐式转换为void *
而std::cout
也可以隐式转换为void *
。
您可以使用以下极简主义示例重现相同的行为
struct X {
operator void *() { return 0; }
};
int main() {
X() < "";
}
以上内容适用于C ++ 03。 我不确定为什么它在C + 11中编译很难(假设它确实如此),因为在C ++ 11中,流转换为void *
被显式转换为bool
所取代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.