c++ - C++中按值传递和按引用传递的区别

标签 c++ pass-by-reference pass-by-value

我想知道以下两个函数中哪个函数在时间和空间方面效率最高。他们都检查堆栈中某个元素的存在。第一个使用按值传递机制,而第二个使用按引用传递。我可能是错的,但我认为按值传递机制隐式复制参数,而在按引用传递中我们明确地这样做。

第一个版本按值传递:

 template<class T>
 bool find (stack<T> source, T value)
{
    while (!source.isEmpty() && source.top() != value)
        source.pop();

    if (!source.isEmpty())
        return true;

    return false;
}

第二个版本按引用传递:

template<class T>
bool find (const stack<T> &source, T value)
{
 stack<T> temp = source; 
while (!temp.isEmpty() && temp.top() != value)
    temp.pop();

if (!temp.isEmpty())
     return true;

return false;

最佳答案

如果您打算在函数内部创建一个本地拷贝,请使用按值传递。它更简单,通常更简单。

附言当您返回 bool 结果时,您通常不需要 if 语句。

return !source.isEmpty();

关于c++ - C++中按值传递和按引用传递的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20130482/

相关文章:

c++ - 此函数是否会在 C++ 中造成内存泄漏?

javascript - 为什么这个 Javascript 示例复制变量值而不是通过引用传递?

c++ - 为什么 Pass By Ref 不起作用

c - 如何理解指针 (*) 和寻址 (&) 运算符的概念?

c++ - 未解析的外部符号(OpenGL 和 C++)

c++ - 如何散列和比较指向成员函数的指针?

c++ - 交换整数的代码适用于 C++,但不适用于 C

ios - Swift 中按值传递与按引用传递的问题?

c++ - 默认情况下,c++ 中的所有内容都是按值传递的

c++ - TBB书中的代码