gpt4 book ai didi

c++ - 根据§13.3.1/4,为什么静态成员函数需要有一个隐式对象参数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:29 25 4
gpt4 key购买 nike

在 §13.3.1/4 (N3337) 中,您将找到以下内容:

For static member functions, the implicit object parameter is considered to match any object (since if the function is selected, the object is discarded).

§9.4.1/2 有这样的断言:

A static member function does not have a this pointer.

那么,静态成员函数隐式对象参数的作用是什么?

最佳答案

它用于使重载决议更容易理解。

struct S {
void f(int);
static void f(double);
};

int main() {
S::f(1);
}

在这里,s::f(1);只是一个硬错误,因为f(int)是比 f(double) 更好的匹配,即使 f(int)过载会进一步导致硬错误。

如果规则是任何其他方式,请考虑会发生什么情况:

template <typename T>
struct U : S {
void u() {
S::f(1);
}
};

template <typename T>
struct V : U<T> {
void v() {
S::f(1);
}
};

在这里,U::u显然有效并调用成员函数。 V<T> ,但是,有一个类型相关的基类,所以在模板定义时不知道从 S 派生。 .有S::f解决 f(double)此处过载会非常困惑。

关于c++ - 根据§13.3.1/4,为什么静态成员函数需要有一个隐式对象参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27317838/

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