和 之间有什么区别?和->在 C++ 中调用方法时

发布于 2024-10-22 07:32:05 字数 482 浏览 1 评论 0原文

你能告诉我a和a之间的区别吗?和->调用 C++ 中的方法。

这段代码使用两种调用方法都可以正常工作。

#include <iostream>

using namespace std;

class myclass
{
    public:
    string doSomething();
};


string myclass::doSomething()
{
    return "done something\n";
}

int main (int argc, const char * argv[])
{
    myclass c;
    std::cout << c.doSomething();

    myclass *c2;    
    std::cout << c2->doSomething();

    return 0;
}

我不明白这两个调用之间的区别?他们都工作吗?

Can you tell me the difference between a . and -> call to a method in C++.

This code works fine, using both calling methods.

#include <iostream>

using namespace std;

class myclass
{
    public:
    string doSomething();
};


string myclass::doSomething()
{
    return "done something\n";
}

int main (int argc, const char * argv[])
{
    myclass c;
    std::cout << c.doSomething();

    myclass *c2;    
    std::cout << c2->doSomething();

    return 0;
}

I don't understand the different between the 2 calls? they both work?

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

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

发布评论

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

评论(4

ペ泪落弦音 2024-10-29 07:32:05
c2->doSomething();

相当于:

(*c2).doSomething();

即在调用方法之前取消引用指针。

如需更多帮助,请参阅 Alf Steinbach 的指针教程

c2->doSomething();

is equivalent to:

(*c2).doSomething();

i.e. the pointer is being de-referenced before calling the method.

Check out Alf Steinbach's pointer tutorial for more help.

梦在深巷 2024-10-29 07:32:05

箭头运算符用于从指向对象实例的指针调用方法。

点运算符用于从对象实例的引用或本地定义的对象上调用方法。

如果颠倒两个示例中的运算符,您的代码将无法编译。

The arrow operator is meant for calling a method from a pointer to an instance of an object.

The dot operator is meant for calling a method from a reference to an instance of an object, or on a locally defined object.

Your code would not compile if you reversed the operators on the two examples.

美人骨 2024-10-29 07:32:05

myclass *c2;
std::cout << c2->doSomething();

这是未定义的行为。 c2 未初始化。

您需要编写

myclass *c2 = &c;
c2->doSomething();

c2->doSomething() 在语义上等同于 (*c2).doSomething() ,而它又与 c.doSomething 相同()

编辑

查看 Alf Steinbach 的指针教程

myclass *c2;
std::cout << c2->doSomething();

This is undefined behaviour. c2 is not initialized.

You needed to write

myclass *c2 = &c;
c2->doSomething();

c2->doSomething() is semantically equivalent to (*c2).doSomething() which in-turn is same as c.doSomething()

EDIT

Check out Alf Steinbach's pointer tutorial

老娘不死你永远是小三 2024-10-29 07:32:05

不,正如发布的那样,它不会工作,因为您没有初始化指针 c2。

至于语法:请参考任何一本C++的入门书籍,里面都会对此进行解释。

最简短的版本是,箭头运算符 ->(*c2).doSomething(); 的快捷形式

No, as posted, it won't work, because you do not initialize the pointer c2.

As for the syntax: Please refer to any introductory book on C++, which will explain this.

The short very version is, that the arrow operator -> is a shortcut form for (*c2).doSomething();

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文