如何 const 声明作为参数发送的 this 指针

发布于 2024-09-05 16:41:22 字数 333 浏览 5 评论 0原文

我想 const 声明作为参数接收的 this 指针。

static void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

它是这样调用的:

void OtherClass::func()
{
  Class::func(this);
}

如果我不 const 声明 OtherClass 指针,这不会编译,我可以更改它。

谢谢。

I want to const declare the this pointer received as an argument.

static void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

It is being called like this:

void OtherClass::func()
{
  Class::func(this);
}

This does not compile nad if i dont const declare the OtherClass pointer, I can change it.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

痴情 2024-09-12 16:41:38

处理 const 和指针时,诀窍是从右到左读取。查看 http://www.parashift.com/c++-faq- lite/const- Correctness.html 以获得良好的概述。

When dealing with const and pointers, the trick is to read right-to-left. Check out http://www.parashift.com/c++-faq-lite/const-correctness.html for a good overview.

情话难免假 2024-09-12 16:41:37

这在我的机器上编译得很好:

#include <iostream>

class bar;

class foo {
public:
    static void f(const bar* b) { std::cout << b << '\n'; }
};

class bar {
public:
    void f() {foo::f(this);}
};

int main(void)
{
    bar b;
    b.f();
    return 0;
}

那么你做了什么不同的事情呢?

This compiles fine on my machine:

#include <iostream>

class bar;

class foo {
public:
    static void f(const bar* b) { std::cout << b << '\n'; }
};

class bar {
public:
    void f() {foo::f(this);}
};

int main(void)
{
    bar b;
    b.f();
    return 0;
}

So what do you have done differently?

一身仙ぐ女味 2024-09-12 16:41:36

不能像这样定义静态类成员函数:

static void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

该函数必须在类声明中声明为静态,然后函数定义如下:

void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

You cannot define static class memberv functions like this:

static void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}

The function must be declared static in the class declaration, and then the function definition looks like:

void Class::func(const OtherClass *otherClass) 
{ 
   // use otherClass pointer to read, but not write to it.
}
一袭水袖舞倾城 2024-09-12 16:41:36

如果您不会更改指针或指向的对象,为什么不采用 const 引用呢?

void Class::func(const OtherClass& otherClass) 
{ 
   // use otherClass ref for read-only use of OtherClass
}
void OtherClass::func()
{
  Class::func(*this);
}

If you won't change the pointer or the object pointed to, why not take a const reference instead?

void Class::func(const OtherClass& otherClass) 
{ 
   // use otherClass ref for read-only use of OtherClass
}
void OtherClass::func()
{
  Class::func(*this);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文