0
点赞
收藏
分享

微信扫一扫

OpenCV构建交互式图像距离测量工具

目录

函数重载:

函数重载概念:

参数类型不同:

参数个数不同:

参数类型顺序不同:

C++支持函数重载的原理--名字修饰:

引用:

引用概念:

引用特性:

常引用:

使用场景:

做参数:

做返回值:

传值、传引用效率比较:

​编辑

引用和指针的区别:

语法:

底层:

内联函数:

特性:


函数重载:

函数重载概念:

参数类型不同:

#include <iostream>
using namespace std;

void Node(int a ,char b)
{
	cout << "Node(a, b)" << endl;
}
void Node(int a ,int b )
{
	cout << "Node(a,b)" << endl;
}

参数个数不同:

#include <iostream>
using namespace std;

void Node(int a ,int b)
{
	cout << "Node(a, b)" << endl;
}
void Node(int a ,int b ,int c)
{
	cout << "Node(a,b)" << endl;
}

参数类型顺序不同:

#include <iostream>
using namespace std;

void Node(int a ,char b)
{
	cout << "Node(a, b)" << endl;
}
void Node(char a ,int b )
{
	cout << "Node(a,b)" << endl;
}

C++支持函数重载的原理--名字修饰:

C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接


引用:

引用概念:

引用特性:

void Node()
{
	int a = 10;
	int& a1 = a;
    int& a11 = a;
    int& a111 = a1;
	printf("%p\n%p\n%p\n%p\n", &a, &a1,&a11,&a111);
}

常引用:

引用权限不能放大:

void TestConstRef()
{
    const int a = 10;
    //int& ra = a;   // 该语句编译时会出错,a为常量
    const int& ra = a;
    // int& b = 10; // 该语句编译时会出错,b为常量
    const int& b = 10;
    double d = 12.34;
    //int& rd = d; // 该语句编译时会出错,类型不同
    const int& rd = d;
}

使用场景:

做参数:
void swap(int &a,int &b)
{
    int tmp = a;
    a = b;
    b = tmp;
}
做返回值:

传值、传引用效率比较:

#include <iostream>
#include <time.h>
using namespace std;
struct A { int a[10000]; };
void TestFunc1(A a) {}
void TestFunc2(A& a) {}
void TestRefAndValue()
{
	A a;
	// 以值作为函数参数
	size_t begin1 = clock();
	for (size_t i = 0; i < 10000; ++i)
		TestFunc1(a);
	size_t end1 = clock();
	// 以引用作为函数参数
	size_t begin2 = clock();
	for (size_t i = 0; i < 10000; ++i)
		TestFunc2(a);
	size_t end2 = clock();
	// 分别计算两个函数运行结束后的时间
	cout << "TestFunc1(A)-time:" << end1 - begin1 << endl;
	cout << "TestFunc1(A&)-time:" << end2 - begin2 << endl;

}
int main()
{
	TestRefAndValue();
	return 0;
}

二者在运行效率上相差很大

引用和指针的区别:

语法:
底层:
int main()
{
	int a = 10;
	int& ra = a;
	int* pa = &a;
	return 0;
}

通过反汇编代码可知,二者在底层是没区别的


内联函数:

  • C和Cpp对于频繁调用的小函数的处理方式:
//C->宏定义  
#define ADD(a, b) ((a) + (b))
//Cpp->内联函数
#include <iostream>
using namespace std;

inline int Add(int x,int y)
{
    return x+y;
}

int main()
{
    int ret = 0;
    ret = Add(1,2);
    cout << ret << endl;
    return 0;
}

特性:

举报

相关推荐

0 条评论