我有一个类成员定义为:
someType* X;
我明白了:
someType* getX() {return x;}
我想获取值而不是指针,即:
someType getX() {return x;} //this is wrong
什么是正确的语法?如何获取值而不是指针?
someType getX() {return *x;}
请注意,尽管这x
按值x
返回,即它在每次返回时创建一个副本*。因此(取决于someType
实际情况)您可能更喜欢返回引用:
someType& getX() {return *x;}
对于构造成本可能很高的非原始类型,建议通过引用返回,并且对象的隐式复制可能会引入细微的错误。
*在某些情况下,这可以通过返回值优化来优化,正如@paul23 在下面正确指出的那样。但是,一般来说,安全的行为并不是指望这一点。如果您不希望创建额外的副本,请通过返回引用(或指针)在代码中为编译器和人类读者明确说明。
someType getX() const { return *x; }
或者,如果someType
复制成本高,则通过const
引用返回:
someType const &getX() const { return *x; }
请注意const
方法上的限定符。
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;
}