Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何返回指针指向的值?_C++_Pointers - Fatal编程技术网

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; }