gpt4 book ai didi

C++ - 函数能够访问类方法而无需静态或创建对象

转载 作者:行者123 更新时间:2023-11-30 00:45:57 25 4
gpt4 key购买 nike

我最近看到这段代码

#include<iostream>
using namespace std;
class A
{
public:
void foo() const { cout << "A::foo() const\n"; }
void foo() { cout << "A::foo()\n"; }
};

A bar() { return A(); }
const A cbar() { return A(); }
int main()
{
bar().foo();
cbar().foo();
}

我从 http://en.cppreference.com/w/cpp/language/return 阅读了关于返回语句的这一部分:
在隐式转换为函数返回类型后,计算表达式,终止当前函数并将表达式的结果返回给调用者。
A() 是一个表达式吗?在遇到这段代码之前,我什至不认为它是一个有效的语法。

A bar() 基本上意味着 bar() 的返回类型是 A,但是
我有两个问题:
1) A() 和 return A() 在函数 bar() 中做了什么?
2) bar() 如何访问 A 类中的 foo() 而不是静态的? - 我的意思是我们甚至还没有为类 A 定义对象。

请给我一些提示。

最佳答案

1) What does A() and return A() do inside the function bar()?

A bar() { return A(); } 按值返回一个对象。这里的 A() 是将要返回的新对象的构造。

2) How can bar() access foo() in A class without it being static? - I mean we haven't even defined an object for class A.

bar() 创建一个临时文件,您可以在其上调用 const 函数。它几乎像下面这样:

{
A _tmp(bar());
_tmp.foo();
}

在表达式 bar().foo() 期间,一个临时变量进入作用域。 bar 的返回值对其进行初始化,然后我们调用该实例的成员函数。然后它立即超出范围。

关于C++ - 函数能够访问类方法而无需静态或创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40828362/

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