class Test
{
public:
typedef std::map<double, double> MapType;
private:
MapType myMap;
public:
...
const MapType& getMap() const // is this normal????
{
return myMap;
}
};
我想在测试类之外使用我的地图,我可以返回参考还是有一些不好的情况?
class Test
{
public:
typedef std::map<double, double> MapType;
private:
MapType myMap;
public:
...
const MapType& getMap() const // is this normal????
{
return myMap;
}
};
我想在测试类之外使用我的地图,我可以返回参考还是有一些不好的情况?
在大多数情况下完全可以(但是如果您的类型不大,则首选按值返回)。只有一种不好的情况,当您的对象将被销毁时 - 您在地图上的引用将悬空。
这种情况的例子:
const Test::MapType& getNewMap()
{
return Test().getMap();
}
// somewhere in code
const Test::MapType& map = getNewMap();
在我看来,这很好。
如果用户按值捕获返回值,她无论如何都会得到一个副本。如果它被引用捕获,那么很明显引用不应该比返回它的对象长。
如果您只想查看内容,请返回类型的副本 - 编译器将优化复制大型类型的任何开销。
const MapType getMap() const
{
return myMap;
}