0
class Test
{
public:
    typedef std::map<double, double> MapType;

private:
    MapType myMap;
 public:
    ...
    const MapType& getMap() const  // is this normal????
    {
        return myMap;
    }
};

我想在测试类之外使用我的地图,我可以返回参考还是有一些不好的情况?

4

3 回答 3

1

在大多数情况下完全可以(但是如果您的类型不大,则首选按值返回)。只有一种不好的情况,当您的对象将被销毁时 - 您在地图上的引用将悬空。

这种情况的例子:

const Test::MapType& getNewMap()
{
   return Test().getMap();
}

// somewhere in code

const Test::MapType& map = getNewMap();
于 2013-09-25T10:43:28.920 回答
1

在我看来,这很好。

如果用户按值捕获返回值,她无论如何都会得到一个副本。如果它被引用捕获,那么很明显引用不应该比返回它的对象长。

于 2013-09-25T10:44:21.677 回答
0

如果您只想查看内容,请返回类型的副本 - 编译器将优化复制大型类型的任何开销。

    const MapType getMap() const
    {
        return myMap;
    }
于 2013-09-25T10:47:55.063 回答