区分传递参考和传递价值

Max*_*xpm 2 c++ reference return-value ambiguity

pass-by-reference函数通常如何区分pass-by-value函数?例如:

template <typename T>
void sort(std::vector<T>& source); // Sorts source.

// Versus...

template <typename T>
std::vector<T> sort(std::vector<T> source); // Returns a sorted copy of source.
Run Code Online (Sandbox Code Playgroud)

这两个功能含糊不清; 其中一个必须重命名或完全删除.

如何避免这种情况?一种形式应该优先于另一种吗?或者是否有任何共同的命名准则来区分它们?

fre*_*low 6

你不能给他们不同的名字吗?sorted例如,我会命名功能版本.

仅仅因为你可以重载函数(或者在这种情况下是函数模板)并不意味着你必须这样做.

顺便说一句,您可以根据"命令式版本"实现"功能版本":

template <typename T>
void sort(std::vector<T>& source)
{
    // sort in place
}

template <typename T>
std::vector<T> sorted(std::vector<T> copy)
{
    sort(copy);
    return copy;
}
Run Code Online (Sandbox Code Playgroud)

  • "只是因为你可以超载并不意味着你应该"是黄金. (5认同)