首页 > 编程语言 >C++学习第一天

C++学习第一天

时间:2024-07-17 20:33:02浏览次数:7  
标签:square 函数 第一天 C++ 学习 参数 模板 template 表达式

CPP的学习day1

1.Visual Studio的学习

安装跳过……

1.创建项目

image-20240715234335187

选择创建新项目

image-20240715234410884

因为是学习,选择第二个控制台应用

image-20240715234448364

分配好后点击创建等一会儿就创建好了……

先修改设置:

image-20240716225521584

右击选择属性然后改为如下图

image-20240716225544133

2.CPP的表达式概念

表达式就是运算符和操作数的序列,指定一项计算,表达式的求值可以产生一个结果,也可能有副作用

std:命名空间

比如1 + 1是二元表达式;std::println也是一个表达式

std::println("Hello world")是调用表达式;对这个表达式的求值有副作用,副作用就是在标准输出流打印Hello world

2.1函数的声明和定义

void function() {}这个叫做函数的实现或者是定义

这是一个最基本的函数声明+定义

1 + 1 的求值残生结果是2

+是运算符,左右两边的1为操作数

image-20240717190202444

如上图,void G(); 即为声明函数,出于某种不可知理由,G函数要是出现在j函数之后,那么要先声明函数G

2.2C++的函数声明语法

返回函数 函数名(参数列表) 异常说明 属性(如下图,注:这里没写属性)

image-20240717190528906

noexcept就是异常说明其含义是:指定函数会或者不会抛出异常,对性能有影响

属性的话 比较常用的有[[nodiscard]]其含义是:就是说明函数的返回值不能被丢弃

image-20240717193143030

如上图,调用了x,但是忽略了返回时,就会有警告

重点是你写这个函数的时候加上nodiscard,调用的时候就知道返回值不能被丢弃,如果丢弃了可能就有问题

:属性不限个数

返回值:是合法的类型名字就可

image-20240717193500604

如上图,为条件异常说明,函数说明后面的noexcept是异常说明

异常说明noexcept(xxx)括号里面要填表达式,求值为true或者false的常量表达式

在这里暂且将弄except也当做是表达式,就是判断里面的表达式会不会抛出异常

所以上图中,f是否会抛出异常就取决于g是否会抛出异常。

在类型的前面,还可以加constexpr/consteval关键词

constexpr的意思是这个函数可以在编译的时候就求值

consteval的意思是这个函数只能在编译时求值

在代码中写一个名字,基本上不是标识符就是关键字

2.3写一个constexpr函数,用于计算一个数的平方

只需要将constexpr放在返回值前,参数写在括号里就好,基本的参数和变量声明差不多,类型在前,名字在后

constexpr int square(int a)
{
	return a * a;
}

语义就是语言所表达的含义,如果你给这个函数取名function显然没有什么有用的信息,不然怎么能写出人能读懂的代码

int main()
{
	std::println("{}", square(2))
}

这样就能输出函数square:谨记将函数写在主函数前或者声明函数

2.3.1如果这时候想要一个其他类型怎么办?

这个时候可以使用模板,模板就是以template<>开头。尖括号里面填模板参数,用逗号隔开,可以嵌套

嵌套就还是template开头,规则就如同没有嵌套一样

template<template< typename>>

首先如果识别到template,那就是一个模板,在尖括号中识别参数如果是typename那就是要调用者填一个参数类型如果是template开头就相当于是递归:和数量没有关系

template<typename T>是一个最基本的模板

如果要嵌套,就将typename T换成一个最简单的模板就行,这样里面又是一个模板

这其中,T是类型的名字,就像是参数一样

当然,模板中还可以填实际的参数

template<int x> constexpr int square()
{
    return x * x;
}

所以如果你要在模板里面传入一个类型的话就要用typename关键字

接下来开始写一个可以接受任意参数版本的square函数,任何类型的参数,写的过程中是不需要管实际类型是什么的

template<typename T> constexpr T square(T a) {
    return a * a;
}
int main()
{
    std::println("{}", square<int>(4));
}

在模板中指定一个类型参数,所以外面可以传一个类型进来,你就不需要关心具体的类型是什么。不管外面传进来是什么,都是你取得名字指代,及T;就像是参数有实参和形参之分

其中的a为形式参数,叫形参,英文是parameter

而square(2);中的int和2可以说是实际参数,也叫实参,英文是argument

标签:square,函数,第一天,C++,学习,参数,模板,template,表达式
From: https://www.cnblogs.com/czyhyym/p/18308208

相关文章

  • python环境配置及基础学习
    python环境配置及基础学习Miniconda安装及使用创建环境condacreate-nnamepython=3.10进入环境condaactivatename退出环境condadeactivateVSCode安装安装成功后,在左边“extensions”搜索Chinese语音包点击install,按照提示重启VSCode在左边“拓展”搜索python,安装......
  • c++中结构体与类的区别
    在C++中,结构体(struct)与类(class)在功能上非常相似,实际上他们之间的主要区别在于默认的访问权限和继承方式。下面详细解释这两种类型的区别:结构体与类最大的不同就在于访问权限默认访问权限结构体(struct):默认的成员访问权限是公开的(public)。这意味着,除非显式地指定访问......
  • 学习日志:多线程
    文章目录前言一、多线程的优点二、单核CPU支持Java多线程单核CPU同时运行多个线程的效率三、线程安全四、死锁产生死锁的四个必要条件:检测死锁预防和避免线程死锁前言并发与并行并发:两个及两个以上的作业在同一时间段内执行。并行:两个及两个以上的作业在......
  • redis学习-12(实现分布式锁、消息队列、缓存一致性问题、单线程快的原因、跳跃表)
    引用以下内容:redis实现分布式锁:Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案)Redis实现分布式锁的7种方案,及正确使用姿势!redis实现消息队列Redis的学习教程(十)之使用Redis实现消息队列缓存一致性问题想要保证数据库和Redis缓存一致性,推荐采用先更新数......
  • Splay 学习笔记
    Splay树,或伸展树,是一种平衡二叉查找树,它通过Splay/伸展操作不断将某个节点旋转到根节点,使得整棵树仍然满足二叉查找树的性质,能够在均摊O(\logN)时间内完成插入,查找和删除操作,并且保持平衡而不至于退化为链。Splay树由DanielSleator和RobertTarjan于1985年发明......
  • C++竞赛优化技巧与考场实用技巧
    在洛谷观看更加简约哦~:一键直达距离2024CSP/NOIP已经不远了,在这里,我便分享一下我总结出来的竞赛优化技巧时间优化算法/数据结构优化在处理一些问题,我们可以采用更高效的算法/数据结构来代替低效的算法/数据结构。例如,你需要多次求一段区间的和时,一般会采用循环直接......
  • Task2:从baseline代码详解入门深度学习
    Task2:从baseline代码详解入门深度学习准备工作数据集数据集被划分为三种,分别是:训练集,开发集测试集。训练集数量最多,用于训练模型,开发集用于在训练中不断调整模型的参数,架构,测试集用于测试模型模型基于seq2seq模型主要由encoderdecoder两部分构成使用GRU模型大致可以理......
  • SpringBoot学习笔记
    微服务阶段javaSE:OOPmySQL:持久化html+css+js+jquery+框架:视图,框架不熟练,css不好;javaweb:独立开发MVC三层架构的的网站:原始ssm:框架:简化了我们的开发流程,配置也开始较为复杂;war:tomcat运行spring再简化:springBoot-jar:内嵌tomcat;微服务架构!服务越来越多:springcloud!高内聚,低耦......
  • 设计模式之抽象工厂模式(学习笔记)
    定义抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或依赖的对象,而无需指定它们的具体类。抽象工厂模式将对象的创建过程抽象化,允许子类通过实现具体工厂类来定制对象的创建。为什么使用抽象工厂模式产品族的一致性抽象工厂模式确保同一产品族中的对......
  • 2024年华为OD机试真题-图像物体的边界-C++-OD统一考试(C卷D卷)
     2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集)题目描述:给定一个二维数组M行N列,二维数组里的数字代表图片的像素,为了简化问题,仅包含像素1和5两种像素,每种像素代表一个物体,2个物体相邻的格子为边界,求像素1代表的物体的边界个数。像素1代表的......