当前位置: 首页 > article >正文

UE学习日志#16 C++笔记#2 基础复习2

10 <cstddef> 中提供了std::byte类型用来表示单个字节

内存中的单个字节,

std::byte b { 42 };

11 <limits>中的类模板 std::numeric_limits

使用样例:

import <iostream>;
#include<limits>
#include<format>
using namespace std;

int main()
{
    cout << format("int-->max=={}\n",numeric_limits<int>::max());
    cout << format("int-->min=={}\n", numeric_limits<int>::min());
    cout << format("int-->lowest=={}\n", numeric_limits<int>::lowest());
    cout << format("double-->max=={}\n", numeric_limits<double>::max());
    cout << format("double-->min=={}\n", numeric_limits<double>::min());
    cout << format("double-->lowest=={}\n", numeric_limits<double>::lowest());
    return 0;
}

结果: 

对于double来说,min表示能够表示的最小正数,而Lowest表示能够表示的最小负数

12 零初始化

可以用{0}或{}统一初始化为0:

原始的整数类型(char,int)初始化为0

原始的浮点类型初始化为0.0

指针类型初始化为nullptr

对象用默认构造函数初始化

样例:

import <iostream>;
#include<limits>
#include<format>
using namespace std;

int main()
{
    float myFLoat1{};
    cout << format("myFLoat1=={}\n", myFLoat1);
    float myFloat2{ 0 };
    cout << format("myFLoat2=={}\n", myFloat2);
    int myInt1{};
    cout << format("myInt1=={}\n", myInt1);
    int myInt2{ 0 };
    cout << format("myInt2=={}\n", myInt2);
    int* ptr1{};
    if(ptr1==nullptr)
        cout << format("ptr1==nullptr\n");
    else
        cout << format(" ptr1!=nullptr\n");
    int* ptr2{0};
    if (ptr2 == nullptr)
        cout << format("ptr2==nullptr\n");
    else
        cout << format(" ptr2!=nullptr\n");
    return 0;
}

 13 简要类型转换

三种方式,推荐第三种

    float myFloat {3.14f};
    int i1{ (int)myFloat };
    int i2{ int(myFloat) };
    int i3{ static_cast<int>(myFloat) };

 结果是舍去小数部分

14 特殊的浮点数

+/-infinity表示正负无穷,例如0除以非零的结果

NaN:非数字,例如0/0,

std::isnan()可以判断是否为非数字,std::isinf()判断是否为无穷(<cmath>中)

numeric_limits<double>::infinity

15 枚举

默认自增,第一个不赋值就默认是0

基本类型是整型,但可以通过以下方式改变:

enum class PieceType : unsigned long
{
    King,
    Queen,
    Rook = 10,
    Pawn
}
PieceType piece { PieceType::King };

16 结构体

//Employee.ixx
export module Employee;
export struct employee {
	char firstInitial;
	int salary;
};
//CPlusPlusLearnProj.cpp
import <iostream>;
#include<limits>
#include<format>
import Employee;
using namespace std;

int main()
{
    employee a;
    a.firstInitial = 'L';
    a.salary = 0;
    cout << format("a.firstInitial=={},a.salary=={}", a.firstInitial,a.salary);
    return 0;
}

输出结果:

17 if语句和switch语句的初始化器

if(<initializer>;<conditional_expression>){
    <if_body>
} else if (<else_if_expression>){
    <else_if_body>
} else {
    <else_body>
}

         <initializer>中引入的任何变量只在<conditional_expression>、<if_body>、 <else_if_expression>、<else_if_body>和<else_body>中可用

        switch同if

switch(<initializer>;<expression>){
    <body>
}

18 三向比较运算符

compare里的

类枚举类型存比较结果,std::is_eq(),is_neq(),is_lt(),is_lteq(),is_gt,is_gteq()判断比较结果

import <iostream>;
#include<limits>
#include<format>
#include<compare>
import Employee;
using namespace std;

int main()
{
    int i{ 11 };
    strong_ordering result{ i <=> 0 };
    if (is_lt(result)) {
        cout << format("lessthan");
    } 
    if (is_gt(result)) {
        cout << format("greater");
    }
    
    return 0;
}

19 属性

19.1 [[nodiscard]]

        用于一个有返回值的函数,若只调用了函数但没有对返回值做任何的处理,就会发出警告。

        C++20中可以用字符串提供一个原因:

[[nodiscard("Some explanation")]]

未完待续


http://www.kler.cn/a/527760.html

相关文章:

  • 数据分析系列--④RapidMiner进行关联分析(案例)
  • RabbitMQ5-死信队列
  • PYH与MAC的桥梁MII/MIIM
  • 浅谈AI的发展对IT行业的影响
  • JAVA(SpringBoot)集成Kafka实现消息发送和接收。
  • leetcode——合并K个有序链表(java)
  • 【股票数据API接口44】如何获取股票指历史分时MA数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • sublime_text的快捷键
  • C++11新特性之tuple元组
  • Day49:添加字典元素
  • CSS 背景与边框:从基础到高级应用
  • I2C基础知识
  • 【项目集成Husky】
  • MATLAB中lineBoundary函数用法
  • Snowflake企业权限管理
  • 动态规划DP 最长上升子序列模型 导弹防御模型(题目分析+C++完整代码实现)
  • 基于Hutool的Merkle树hash值生成工具
  • 使用Pygame制作“贪吃蛇”游戏
  • 深度学习篇---深度学习框架
  • 设计模式Python版 桥接模式
  • X86路由搭配rtl8367s交换机
  • 计算机网络之物理层通信基础(信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念)
  • IBM数据与人工智能系列 安装 IBM 编程助手
  • Baklib在企业知识管理中的突出优势与其他工具的深度对比研究
  • 解锁高效编程:C++异步框架WorkFlow
  • 柱量最大值转向