传递的时候尽量传引用

如果传递对象的效率会低,因为要调用复制构造函数。

传递引用的话,执行效率会很高。

main.cpp

#include <iostream>
#include "TestClass.h"
using namespace std;
TestClass test(){
    TestClass t;
    return t;
}
void test1(TestClass testClass){
    cout << "对象作为参数传递" << endl;
}
void test2(TestClass &testClass){
    cout << "引用作为参数传递" << endl;
    cout << "最好传引用" << endl;
    cout << "如果担心值被改变,那就加上const,有成员函数是用不了,就把要调用的函数加上const" << endl;
}
int main(){
    TestClass t1 = test();
    cout << "开始调用" << endl;
    test1(t1);
    test2(t1);
    system("pause");
    return 0;
}

TestClass.h

#pragma once
class TestClass
{
public:
    TestClass();
    TestClass(const TestClass &testClass);
    ~TestClass();
};

TestClass.cpp

#include "TestClass.h"
#include <iostream>
using namespace std;
TestClass::TestClass()
{
    cout << "testClass" << endl;
}
TestClass::TestClass(const TestClass &testClass){
    cout << "copy constructor" << endl;
}
TestClass::~TestClass()
{
    cout << "destructor" << endl;
}
时间: 2024-10-27 07:51:31

传递的时候尽量传引用的相关文章

条款22: 尽量用“传引用”而不用“传值”

c语言中,什么都是通过传值来实现的,c++继承了这一传统并将它作为默认方式.除非明确指定,函数的形参总是通过“实参的拷贝”(拷贝构造函数)来初始化的,函数的调用者得到的也是函数返回值的拷贝.为避免这种潜在的昂贵的开销,就不要通过值来传递对象,而要通过引用. 通过引用来传递参数还有另外一个优点:它避免了所谓的“切割问题(slicing problem)”.当一个派生类的对象作为基类对象被传递时,它(派生类对象)的作为派生类所具有的行为特性会被“切割”掉,从而变成了一个简单的基类对象.这往往不是你所

java传递参数是传值还是传引用

这个问题,网上一查越看越迷糊,纠结完了先总结下 先看个栗子: 1 public class Example { 2  3     public void change(String str1, StringBuffer sbr1, char[] ch1, int a) { 4         str1 = "world"; 5         sbr1.append("world"); 6         ch1[0] = 'g'; 7     } 8  9    

C++传值和传引用

传值参数 首先你肯定明白一个道理:当初始化一个非引用类型的变量时,初始值被拷贝给变量,此时对变量的改动不会涌向初始值 int n = 0; int i = 1; // i是n的副本 i = 42; // i的值改变,n的值不改变 传值参数的机理完全一样,由于每次调用函数时都会重新创建它的形参,并用传入的实参对形参进行初始化,所以函数对形参做的所有操作不会影响实参,如果我们想让函数改变我们传入的实参本身们就可以用到指针形参访问函数外部对象 指针形参 先看一段代码: int n = 0; int i

PHP传值和传引用、传地址的区别

传值,   是把实参的值赋值给行参   那么对行参的修改,不会影响实参的值 传地址   是传值的一种特殊方式,只是他传递的是地址,不是普通的如int   那么传地址以后,实参和行参都指向同一个对象 传引用   真正的以地址的方式传递参数   传递以后,行参和实参都是同一个对象,只是他们名字不同而已   对行参的修改将影响实参的值 仅讨论一下值传递和引用:   所谓值传递,就是说仅将对象的值传递给目标对象,就相当于copy:系统将为目标对象重新开辟一个完全相同的内存空间.   所谓引用,就是说将对

c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

 一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会对调用者的初始变量产生任何影响. 当方法传递的参数是引用类型是,只是将变量的引用复制到目标参数中,实参和形参的引用指向内存中的同一位置.所以,在目标方法中对形参所做的更改会影响调用者的初始变量. 二.一些特殊的方法参数 1.引用参数---ref (使值类型的变量做方法参数时也可以传引用) 一些数据类型(

.net中以传引用的方式 向方法中传参数

CLR(CommonLanguageRuntime)公共语言运行时,允许以传引用而非传值的方式传递参数.在C#中,这是用关键字 out 和ref来做到的. 从CLR角度来看,这两个关键字没什么区别,生成的IL代码都是一样的.但是C#编译器是将这两个关键字区别对待的,而且这个区别决定了由哪个方法负责初始化所引用的对.象.如果方法的参数用out关键字来标记,表明不指望调用者在调用方法之前初始化对象.被调用的方法不能够读取out标记的参数的值,而且在函数返回前必须给该参数写入值. 相反,使用ref标记

关于函数传参--传指针,传引用

今天和同学讨论到指针和引用的传递问题,有些想法从推理上讲是正确的,但是因为是推理,说出自己观点的时候不是那么有底气,本着实践是检验真理的唯一标准的原则,在电脑上敲了几段代码,验证了推理的正确性. 先上代码,再分析. 代码1: void Swap0(int a1,int b1){ int temp; temp=a1; a1=b1; b1=temp; } void Swap1(int *a1,int *b1){ //交换地址 int *temp; temp=a1; a1=b1; b1=a1; } v

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用 传值 把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已 对行参的修改将影响实参的值 所谓变量是内存地址的一个抽象名字,在静态编译的程序中,所有变量名都会在编译时转换成内存地址,机器不知道变量名,只知道地址. C 语

python函数传参是传值还是传引用?

首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传递. 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. 引用传递(pass-