我有一个Text
类,它有一些返回指针的方法,允许调用链接。 (原因是我只是喜欢链接的外观和感觉,老实说!)
我的问题是,这在实践中通常更好(在安全性和多功能性>性能方面)?返回和使用参考?或者返回并使用指针?
两者的示例,从指针版本开始:
class Text{
public:
Text * position(int x, int y){
/* do stuff */
return this;
}
Text * write(const char * string);
Text * newline();
Text * bold(bool toggle);
Text * etc();
...
};
textInstance.position(0, 0)->write("writing an ")->bold(true)->write("EXAMPLE");
textInstance.position(20, 100)
->write("and writing one across")
->newline()
->write("multiple lines of code");
与参考版本对比:
class Text{
public:
Text & position(int x, int y){
/* do stuff */
return *this;
}
Text & write(const char * string);
Text & newline();
Text & bold(bool toggle);
Text & etc();
...
};
textInstance.position(0, 0).write("writing an ").bold(true).write("EXAMPLE");
textInstance.position(20, 100)
.write("and writing one across")
.newline()
.write("multiple lines of code");
答案 0 :(得分:3)
使用引用是正常的;优先权:ostream::operator<<
。对于所有普通用途,此处的指针和引用都具有相同的速度/尺寸/安全性。
答案 1 :(得分:2)
由于永远不会返回nullptr
,我建议使用参考方法。它更准确地表示将如何使用返回值。
答案 2 :(得分:2)
指针和引用之间的区别非常简单:指针可以为null,引用不能。
检查您的API,如果能够返回null是否有意义,可能表示错误,请使用指针,否则使用引用。如果使用指针,则应添加检查以查看它是否为空(并且此类检查可能会降低代码速度)。
这里的参考看起来更合适。
答案 3 :(得分:1)
非常有趣的问题。
我认为安全性或多功能性没有任何区别,因为你可以用指针或参考做同样的事情。我也认为没有任何明显的性能差异,因为引用是通过指针实现的。
但我认为使用引用更好,因为它与标准库一致。例如,iostream中的链接是通过引用而不是指针完成的。