在非模板类中,是否有理由选择const <type>& foo();和<type> foo();形式的函数返回签名?其中<type>是一个内在类型。如果<type>是一个类/struct对象呢?
还感兴趣的是,函数const是否起作用:const <type>& foo() const; to <type> foo() const;
例如,在非模板类中,非模板函数:
const int& foo() const { return member_variable_; }对比
int foo() const { return member_variable_; }发布于 2010-01-11 21:31:27
如果您需要返回一个值,则必须返回一个值-- const引用是不可接受的替代。但我怀疑你是在问这样的事:
struct A {
X x;
...
X f1() { return x; }
const X & f2() { return x; }
};我从来没有想出一个万无一失的指导方针。
发布于 2010-01-11 21:38:29
这一切都取决于你到底想做什么。
如果要返回对用户代码使用的对象的引用,则:
<type>& foo() { ... }如果希望以只读方式返回对对象的引用,只允许访问此对象类型的const函数,那么:
const <type>& foo() { ... }如果希望返回对用户代码使用的对象的引用,即使类实例用于只读(如const),则:
<type>& foo() const { ... }如果希望以只读方式返回对对象的引用,则只允许访问此对象类型的const函数,如果类实例用于只读(作为const),则允许事件:
const <type>& foo() const { ... }添加一个警告:不要返回对函数的变量的引用,它们不在函数之外.
发布于 2010-01-11 21:40:28
const <type>& foo();您可能有一个资源,如类中的元素容器,foo()返回特定的元素,如果您知道这些资源的可用时间足够长,您可能会将const引用返回容器中的元素,从而避免不必要的数据分配/复制。它可能是const或非foo(),这取决于您如何处理数据,如果您不希望通过foo()返回的引用修改数据,那么就让它成为const。也许你有一种情况,你想要修改资源和一些额外的工作需要做,你会使非const。您可以在您的api中两者都有,用户将根据usecase进行选择。
<type> foo();返回资源<type>的新副本。那意味着复制了一份。这对于简单的数据或值可能共享的位置都有好处,您希望确保<type>的每个实例都是独立的--不共享,就像某些字符串或int。
https://stackoverflow.com/questions/2045074
复制相似问题