0

考虑这个类:

class example
{

    inline const A& GetA()
    {
        return _a;
    }

private:
    A _a;
};

使用以下代码:

example Ex;
A& a = Ex.GetA();

_a 将通过引用返回,而不复制 _a。

我的问题是,如果我按如下方式删除引用运算符会发生什么:

example Ex;
A a = Ex.GetA();

a被引用_a或创建副本_a

4

3 回答 3

4

如果存在可访问的复制构造函数,它将是一个副本,否则将是一个编译错误。如果您将变量声明为一个变量,则它只是一个引用。

于 2013-09-05T14:15:58.017 回答
1

在第二个示例中,您声明了一个局部变量(不是引用),因此您将获得从函数返回的引用值的副本

那就是说:不要这样做。通过非常量引用返回的公共非常量方法仅比具有公共成员的结构好一小步,但代价是复杂性。只需将结构与公共成员一起使用并直接访问,或者正确封装您的数据。

于 2013-09-05T14:27:45.393 回答
0

您可以通过此代码示例进行简单检查:

#include <iostream>

class A {
public:
    A() {
        std::cout << "Creating A from default ctor" << std::endl;
    }
    A(const A &) {
        std::cout << "A copy created!" << std::endl;
    }
};

class Example {
public:
        inline A& getA() {
            return _a;
        }

    private:
        A _a;
};

int main() {
Example a;
A aa = a.getA();

return 0;
}
于 2013-09-05T14:30:49.650 回答