wsl和windows下编译C++以及函数重载和函数模板的问题记录

  • wsl+Ubuntu+vscode+c++

每次打开wsl,进入ubuntu中新建文件夹进行c++编程的时候经常报错,显示配置文件有问题,但是每次按照vscode官方文件配置的话是没有问题的。百思不得其解。

今晚发现了问题所在。每次新建工作区的时候会自动生成.vscode文件夹,里面是配置好的tasks和launch的json文件,所以每次使用官方文件配置的之后,那个工作区就可以正常使用了,但是如果在Ubuntu中新建文件夹的话,.vscdoe文件夹没有复制过来,或者说没有重新正确建立,所以每次都报错。

所以解决方法就是在本地windows中建立一个专门用于跑ubuntu系统的区域,配置好之后一劳永逸vscdoe配置wsl下的c++调试环境,一旦有需要就在配置好的文件夹下调试,这样的话.vscode文件都不会有问题。

附:linux下的编译命令

在使用cd 可以改变路径,比如到d盘下的project文件夹则是:cd /mnt/d/project

在路径下新建文件夹是 mkdir newfolder

编译cpp文件是g++ helloworld.cpp -o project

运行编译好的文件是 ./project

也可以不用指定文件名进行编译,如:g++ helloworld.cpp

这样生成的可执行文件直接用 ./a.out命令执行

  • 函数重模板 function template:

应用场合:如果有多种不同类型的变量需要比较大小,常规写法是每种不同类型的变量都要写一个函数来比较,这样繁琐,荣誉。

函数模板解决了这个问题。

如下代码:在一个项目中,有个项目需求是能够实现多个函数用来返回两个数的最大值,要求能支持char类型、int类型、double类型变量。然后呢,根据这个需求,我们写了以下这个代码

#include <iostream>

using namespace std;

//比较int 类型
int Max(int a, int b)
{
	return a > b ? a : b;
}

//比较char 类型
char Max(char a, char b)
{
	return a > b ? a : b;
}

//比较float 类型
float Max(float a, float b)
{
	return a > b ? a : b;
}

int main(void)
{

	int  n = 1;
	int	 m = 2;
	cout << "max(1, 2) = " << Max(n, m) << endl;

	float a = 2.0;
	float b = 3.0;
	cout << "max(2.0, 3.0) = " << Max(a, b) << endl;

	char i = 'a';
	char j = 'b';
	cout << "max('a', 'b') = " << Max(i, j) << endl;

	return 0;
}

同样的函数体,但是针对不同类型的参数,需要多次写这个非常相似的函数,这是非常繁琐的,而函数模型的出现就是解决这种问题。

当我们需要多个函数体一样的函数时,我们可以使用函数模板

#include <iostream>

using namespace std;

template <typename T> //T is any data type you want , like int or float
T Max(T a, T b) {
    return a > b ? a : b;
}

int main(void)
{
    int n = 2;
    int m = 3;
    cout<<"max(2,3)="<< max(n, m)<<endl;

    char x = 'a';
    char y = 'b';
    cout<<"max(a,b)="<< max(x, y)<<endl;

    float i = 3.0;
    float j = 4.0;
    cout<<"max(3.0,4.0)="<< max(i, j)<<endl;

    return 0;
}
  • 函数重载 function overloading

C中规定同一作用域中不能有同名函数出现,但是c++中允许在同意作用域中出现同名函数,但是这些函数的参数类型和参数个数不同。这些同名函数用来实现不同的功能,这就是函数的重载。同样不同类型的数据比较大小,函数名相同,但根据参数类型和参数个数总能匹配到相对于的函数上。

#include <iostream>

using namespace std;

int Max(int a, int b)
{
	return a > b ? a : b;
}

char Max(char a, char b)
{
	return a > b ? a : b;
}

float Max(float a, float b)
{
	return a > b ? a : b;
}

int main(void)//main 函数中的Max函数总能根据参数的类型和个数匹配到对应的函数
{

	int  n = 1;
	int	 m = 2;
	cout << "max(1, 2) = " << Max(n, m) << endl;

	float a = 2.0;
	float b = 3.0;
	cout << "max(2.0, 3.0) = " << Max(a, b) << endl;

	char i = 'a';
	char j = 'b';
	cout << "max('a', 'b') = " << Max(i, j) << endl;

	return 0;
}

总结:函数模板是对函数重载的简化。

猜你喜欢

转载自blog.csdn.net/qq_39333636/article/details/134279948