如何返回指针指向的值?

Jam*_*lan 3 c++ pointers

我有一个类成员定义为:

someType* X;
Run Code Online (Sandbox Code Playgroud)

我觉得它像:

someType* getX() {return x;}
Run Code Online (Sandbox Code Playgroud)

我想得到的值而不是指针,即:

someType getX() {return x;} //this is wrong
Run Code Online (Sandbox Code Playgroud)

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

Pét*_*rök 11

someType getX() {return *x;}
Run Code Online (Sandbox Code Playgroud)

请注意,这会x 按值返回,即它会x在每次返回时创建一个副本*.所以(取决于someType实际情况)你可能更喜欢返回引用:

someType& getX() {return *x;}
Run Code Online (Sandbox Code Playgroud)

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

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

  • - 关于返回值优化的大量注释 - .http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.9 (2认同)