提问人:Jan Schultke 提问时间:6/12/2023 最后编辑:Jan Schultke 更新时间:6/12/2023 访问量:101
为什么在联机外定义的返回类型中不允许成员查找?
Why is member look-up not allowed in return types of out-of-line definitions?
问:
请考虑以下代码:
struct T {
using iterator = int*;
iterator begin() const;
iterator end() const;
/* ... */
};
// OK, member look-up allowed in trailing return types (since C++11)
auto T::begin() const -> iterator { /* ... */ }
// error: iterator does not name a type
iterator T::end() const { /* ... */ }
使第二种形式不可能的理由是什么?如果我们能引用返回类型中的成员名称,那显然会很有用。C++11 已经在一定程度上弥补了这一点,但是 C++98 或预标准的“带类的 C”呢?
我知道这需要某种形式的展望,因为解析器在解析之前无法理解。它不应该破坏与 C 的兼容性,因为 C 没有行外成员,因此我们可以以任何我们想要的方式实现它。iterator
T::end()
对于编译器来说,这是否太难实现 - 如果是这样,为什么 - 或者它只是一个设计决策?
答: 暂无答案
评论
iterator
iterator
iterator
T::iterator
::iterator
T::iterator
::iterator
<
>
<
A<B<C>
A
<
>
B