如何返回指针指向的值?

时间:2012-05-15 10:45:38

标签: c++ pointers

我有一个类成员定义为:

someType* X;

我明白了:

someType* getX() {return x;}

我想获得价值而不是指针,即:。

someType getX() {return x;} //this is wrong

这个的正确语法是什么?我如何得到值而不是指针?

3 个答案:

答案 0 :(得分:11)

someType getX() {return *x;}

请注意,这会按值返回x ,即它会在每次返回*时创建x的副本。所以(取决于someType到底是什么),您可能更愿意返回引用

someType& getX() {return *x;}

对于非基本类型,建议通过引用返回,其中构造成本可能很高,并且隐式复制对象可能会引入微妙的错误。

* 在某些情况下,可以通过返回值优化对其进行优化,正如@ paul23在下面正确指出的那样。但是,安全行为一般不依赖于此。如果您不希望创建额外的副本,请通过返回引用(或指针)在编译器和人类读者的代码中清楚说明。

答案 1 :(得分:2)

someType getX() const { return *x; }

或者,如果someType复制费用昂贵,请按const引用返回:

someType const &getX() const { return *x; }

请注意方法上的const限定符。

答案 2 :(得分:1)

SomeType getX()
{
  //  SomeType x = *x; // provided there is a copy-constructor if    
  //  user-defined type.
  // The above code had the typo. Meant to be.
  SomeType y = *x;
   return y;
}