C++ 如何返回指针指向的值?
我的班级成员定义为:C++ 如何返回指针指向的值?,c++,pointers,C++,Pointers,我的班级成员定义为: someType* X; 我得到的结果是: someType* getX() {return x;} 我希望获取值而不是指针,即: someType getX() {return x;} //this is wrong 这个的正确语法是什么?如何获取值而不是指针 SomeType getX() { // SomeType x = *x; // provided there is a copy-constructor if // user-defin
someType* X;
我得到的结果是:
someType* getX() {return x;}
我希望获取值而不是指针,即:
someType getX() {return x;} //this is wrong
这个的正确语法是什么?如何获取值而不是指针
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;
}
但请注意,这会按值返回x
,即在每次返回时创建x
的副本*。因此(取决于someType
的实际情况),您可能更喜欢返回引用:
对于构造成本可能很高的非基本类型,建议通过引用返回,并且隐式复制对象可能会引入细微的bug
*在某些情况下,这可以通过返回值优化来优化,正如@paul23在下面正确指出的那样。然而,安全行为一般不依赖于此。如果您不希望创建额外的副本,请通过返回引用(或指针)在代码中向编译器和人类读者说明这一点
或者,如果someType
的复制成本很高,请通过const
参考返回:
someType const &getX() const { return *x; }
注意,方法>代码> const 限定符。
你需要得到一本好的C++书籍,然后停止使用指针(直到后来)。首先学习C++的基础知识,以后的指针(不,那些不是基础)!这有什么不对?这里有一个性能问题,但这正是问题的目的。对不起,这里有错别字。意味着某种类型的y=*x;返回y-关于返回值优化的强制性说明-。不过,通过可变引用返回具有不同的语义。@paul23,感谢您的提及,我添加了一个脚注来详细说明。@larsmans,与通过值返回确实不同,但与通过可变指针返回类似,OP在后面。someType& getX() {return *x;}
someType getX() const { return *x; }
someType const &getX() const { return *x; }