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

news2024/11/24 18:00:35
  • 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;
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1183226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Keil Debug——error: #18: expected a “)“

目录 一、问题现象二、问题原因三、解决方案四、总结 一、问题现象 二、问题原因 这个错误是编译器在编译代码时发现的一种常见错误。导致这个报错的原因很多&#xff1a; 常见的自己一般可解决的&#xff1a; 它意味着在代码中某个位置缺少一个右括号 (“)”)&#xff0c;导致…

Unity 判断两个UI是否相交

今天碰到要判断两个UI是否相交的交互。 尝试了下&#xff0c;发现有两个方法都成功了。 1、使用Collider2D组件 分别创建两个Image组件&#xff0c;并且添加Collider2D组件&#xff0c;其中一个还要添加Rigidbody2D组件&#xff0c;如下图&#xff1a; 然后创建个判断脚本“…

【SVN】

SVN 1 svn使用1.1 主干合并到分支1.2 分支合并到主干1.3 分支建立1.4 创建分支1.5 切换分支1.6 合并分支1.7 删除分支 2 概念理解 1 svn使用 1.1 主干合并到分支 首先&#xff0c;在本地trunk中先update一下&#xff0c;有冲突的解决冲突&#xff0c;保证trunk和repository已…

力扣每日一题 -- 2919. 使数组变美的最小增量运算数

//这题本质还是一个背包问题 //怎么去思考这个问题呢 //我最开始的思想是根据经验来看&#xff0c;最小增量运算数&#xff0c;并且使数组变美丽&#xff0c;那么就有点像编辑距离的问题 //但是我看了下时间复杂度&#xff0c;不能是n^2,那么再去仔细思…

番外---10.0 shell编程+调试

######### Step0&#xff1a;理解Shell script&#xff08;shell变量作用域&#xff0c;定义&#xff0c;引用&#xff09;; Step1&#xff1a;掌握判断式用法&#xff08;test, [ ], &&, ||&#xff0c;&#xff1b;&#xff0c;|&#xff09; 2&#xff1a;正则表达式…

如何测试360手机浏览器的 --360手机浏览器测试范围概述

一、基本测试 冒烟测试 由开发&#xff0c;测试&#xff0c;产品共同参与进行。 &#xff08;1&#xff09; 主流程和基本功能测试&#xff08;要求产品参与&#xff0c;如果不参与&#xff0c;一定要说明原因。测试确认此过程完成&#xff09; a) 将本次提测的核心功能过一…

【Linux】程序地址空间回顾

我们的地址空间划分成如下几个区域&#xff1a; 代码区&#xff0c;字符常量区&#xff0c;已初始化全局变量区&#xff0c;未已初始化全局数据区&#xff0c;堆区&#xff0c;栈区&#xff1b;其中有代码区至栈区的代码地址依次增大。 局部变量是具有临时性的局部变量&#x…

springboot项目中手动提交事务

springboot项目中手动提交事务 演示主要代码场景/需求/实际效果解决办法 &#xff1a;在mi方法中手动提交事务Spring的7中事务传播行为 演示主要代码 Service 层代码 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.an…

GPT-4 Turbo:OpenAI发布旗舰版GPT-4模型,更便宜|更强大|128K上下文|支持多模态

一、介绍 OpenAI 在 2023 年 11 月 7 日举行首届开发者大会&#xff0c;此次展会的亮点无疑是 GPT-4 Turbo 的亮相&#xff0c;它是 OpenAI 著名的 GPT-4 模型的升级版。 GPT-4 Turbo 有两种变体&#xff1a;一种用于文本分析&#xff0c;另一种能够理解文本和图像。 GPT-4 Tu…

Java 设计模式——解释器模式

目录 1.概述2.结构3.案例实现3.1.抽象表达式类3.2.终结表达式3.3.非终结表达式3.4.环境类3.5.测试 4.优缺点5.使用场景 1.概述 &#xff08;1&#xff09;如下图&#xff0c;设计一个软件用来进行加减计算。我们第一想法可能就是使用工具类&#xff0c;提供对应的加法和减法的…

第十三章 Python操作数据库

系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定…

基于SSM的本科生导师指导平台设计实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Scala语言使用Selenium库编写网络爬虫

目录 一、引言 二、环境准备 三、爬虫程序设计 1、导入必要的库和包 2、启动浏览器驱动程序 3、抓取网页内容 4. 提取特定信息 5. 数据存储和处理 四、优化和扩展 五、结语 一、引言 网络爬虫是一种自动抓取互联网信息的程序。它们按照一定的规则和算法&#xff0c;…

【VSS版本控制工具】

VSS版本控制工具 1 安装 VSS2 服务器端配置3 新建用户4 客户端配置Vss2005Vs20055 客户端详细操作 1 安装 VSS 第一步&#xff1a;将VisualSourceSafe2005安装包解压。 第二步&#xff1a;找到setup.exe双击运行。 第三步&#xff1a;在弹出的界面复选框中选中Iaccepttheterms…

Effective C++ 条款5:了解C++默默编写并调用哪些函数

编译器为一个空类声明一个拷贝构造函数、一个拷贝赋值操作符和一个析构函数&#xff0c;如果没有声明任何构造函数&#xff0c;编译器也会声明一个默认构造函数&#xff0c;所有的这些函数都是public且inline 因此&#xff0c;如果写下&#xff1a; class Empty{}&#xff1b;…

少儿编程 2023年9月中国电子学会图形化编程等级考试Scratch编程三级真题解析(判断题)

2023年9月scratch编程等级考试三级真题 判断题(共10题,每题2分,共20分) 19、运行程序后,“我的变量”的值为25 答案:对 考点分析:考查积木综合使用,重点考查变量和运算积木的使用 开始我的变量为50,执行完第二行代码我的变量变为49,条件不成立执行否则语句,所以…

DBever 连接trino时区问题 The datetime zone id ‘GMT+08:00‘ is not recognised

DBever连接trino 测试连接成功&#xff0c;但是执行sql报时区不对、如果你默认使用的是大于jdk8的版本 会存在这个问题&#xff0c;因为jdk版本 jdk8 和jdk17 版本默认时区是不同的 trino官网明确说明了时区默认跟jdk走 解决方案 可以先行查看JDK本地时区库版本&#xff0c;执…

开发记录【1】

给列表加上序号 实现&#xff1a;Oracle有自带序号rownum,加上这个字段即可 【开发细节1】更新人可通过共享组件获取 【开发细节2】存入部门ID&#xff0c;想让其展示部门名&#xff0c;使用了共享组件&#xff0c;但是没显示&#xff0c;这是为什么呢&#xff1f; 【原因及解…

Python高级进阶(2)----Python装饰器的艺术

文章目录 装饰器基础示例代码:执行结果:参数化装饰器示例代码:执行结果:类装饰器示例代码:执行结果:装饰器的堆栈示例代码:执行结果:在Python中,装饰器是一种非常强大的特性,允许开发人员以一种干净、可读性强的方式修改或增强函数和方法。以下是一个关于Python装饰器…

当爱好变成职业,会不会就失去了兴趣?

当爱好变成职业&#xff0c;会不会就失去了兴趣&#xff1f; 当兴趣变成职业 1、学习能力变强了&#xff0c;积极主动性增加了。 2、学习努力变现了&#xff0c;赚到的更钱多了。 3、赚钱能力变强了&#xff0c;反过来再次促使兴趣发展&#xff08;兴趣更大了....干劲更足了&…