c – `*这个外部成员函数体?

前端之家收集整理的这篇文章主要介绍了c – `*这个外部成员函数体?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在5.1.1 / 3的C标准[expr.prim.general]

Unlike the object expression in other contexts,*this is not required to be of complete type for purposes
of class member access outside the member function body. Only class members declared prior
to the declaration are visible.

然后这个例子:

struct A {
    char g();
    template<class T> auto f(T t) -> decltype(t + g()) 
    { return t + g(); }
};
template auto A::f(int t) -> decltype(t + g());

你可以解释报价和示例吗?这里正在演示什么?

解决方法

这意味着您可以通过明确或隐式地访问类定义内的函数体之外的成员.此时,类型不完整,通常您无法访问不完整类型的成员.

但是你只能在成员函数声明的限制部分内做到这一点;前一句话就是说:

It shall not appear before the optional cv-qualifier-seq

这意味着您不能在参数或领先的返回类型规范中使用它.据我所知,在功能体之外,唯一可以使用它的地方是尾随的返回类型.

在拖尾返回类型中使用decltype时,可能需要执行此操作,以获取涉及非静态成员的表达式的类型.该示例通过隐式使用它来访问尾随返回类型中的g()来显示此信息.如果将它作为decltype(t this-> g())编写,那么将会更加清晰.

猜你在找的C&C++相关文章