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")]]

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值