gpt4 book ai didi

c++ - 为什么这段代码可以编译? cout < "tt";

转载 作者:行者123 更新时间:2023-11-28 02:56:17 27 4
gpt4 key购买 nike

cout是类 ostream 的对象, 和 ostreambasic_ostream 的类型定义:

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 .

关于c++ - 为什么这段代码可以编译? cout < "tt";,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21893258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com