c++ 对象调用不带参数的成员函数时会发生什么
What happens when a member function with no arguments is called by an object in c++
假设我们有一个 class X
的成员函数,它是 X f()
,returns 是 class X
的一个对象并且不带参数。
所以如果它被class X
的对象调用,就说X obj
是对象。
因此,如果我们调用 obj.f()
,那么根据 C++ 规则,一个秘密参数将传递给函数 f()
,即包含地址的对象的 this
指针调用 f()
.
的对象
所以我的困惑是它是如何由 C++ 管理的,因为这意味着我们永远不能在 C++ 中拥有一个完全没有参数的成员函数,因为每次都会传递一个秘密参数。
对于一个参数为func(int a)
的函数,它实际上是一个可以接受2个参数的函数,其中一个参数是秘密参数(this
指针),另一个是int a
.
那么,如果我们严格要求 C++ 中的成员函数完全没有参数(例如在中断服务例程的情况下),我们该怎么办?
如果我错了或者我遗漏了一些概念,请告诉我。
你的意思可能是像这样的静态函数;
class Object {
public:
static void function() {}
};
你要的是class function, aka a static member function.
它将没有隐式 this
指针。
在 C++ 中,您可以使用 static
关键字声明一个:
class foo
{
public:
static void bar();
};
void foo::bar()
{
this; // error
}
假设我们有一个 class X
的成员函数,它是 X f()
,returns 是 class X
的一个对象并且不带参数。
所以如果它被class X
的对象调用,就说X obj
是对象。
因此,如果我们调用 obj.f()
,那么根据 C++ 规则,一个秘密参数将传递给函数 f()
,即包含地址的对象的 this
指针调用 f()
.
所以我的困惑是它是如何由 C++ 管理的,因为这意味着我们永远不能在 C++ 中拥有一个完全没有参数的成员函数,因为每次都会传递一个秘密参数。
对于一个参数为func(int a)
的函数,它实际上是一个可以接受2个参数的函数,其中一个参数是秘密参数(this
指针),另一个是int a
.
那么,如果我们严格要求 C++ 中的成员函数完全没有参数(例如在中断服务例程的情况下),我们该怎么办?
如果我错了或者我遗漏了一些概念,请告诉我。
你的意思可能是像这样的静态函数;
class Object {
public:
static void function() {}
};
你要的是class function, aka a static member function.
它将没有隐式 this
指针。
在 C++ 中,您可以使用 static
关键字声明一个:
class foo
{
public:
static void bar();
};
void foo::bar()
{
this; // error
}