gpt4 book ai didi

c++ - 中缀 vs 前缀语法 : name lookup differences

转载 作者:IT老高 更新时间:2023-10-28 21:42:29 29 4
gpt4 key购买 nike

C++ 中的运算符通常被认为是函数/方法的替代语法,尤其是在重载的上下文中。如果是这样,下面的两个表达式应该是同义词:

std::cout << 42;
operator<<(std::cout, 42);

在实践中,第二条语句会导致以下错误:

call of overloaded ‘operator<<(std::ostream&, int)’ is ambiguous

像往常一样,这样的错误信息伴随着一个可能的候选列表,它们是:

operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
operator<<(basic_ostream<char, _Traits>& __out, char __c)
operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)

这样的错误至少引发了两个问题:

  1. 这两个语句有何不同(在名称查找方面)?
  2. 为什么 operator<<(basic_ostream<char, _Traits>& __out, int __c)不见了?

中缀和前缀符号似乎不能完全互换——不同的语法需要不同的名称解析策略。有什么区别?它们来自哪里?

最佳答案

不,这两个表达式不应该是同义词。 std::cout << 42被查找为 operator<<(std::cout, 42)std::cout.operator<<(42) .两种查找都产生了可行的候选者,但第二个是更好的匹配。

关于c++ - 中缀 vs 前缀语法 : name lookup differences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25352640/

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