我有一个类成员定义为:
someType* X;
我明白了:
someType* getX() {return x;}
我想获得价值而不是指针,即:。
someType getX() {return x;} //this is wrong
这个的正确语法是什么?我如何得到值而不是指针?
答案 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;
}