栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++Primer 读书笔记——第二章:变量和基本类型(二)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++Primer 读书笔记——第二章:变量和基本类型(二)

前言

C++Primer 读书笔记,一个小白的自留地,欢迎大佬批评指正~


2.4 const限定符

默认状态下,const对象仅在文件内有效

#include 

extern int a;
extern const int b;

int main()
{
    std::cout << a << std::endl;
    std::cout << b << std::endl; //为了能够跨文件读取const,在声明和定义处都加上extern

    return 0;
}

 2.4.1 const引用

#include 

int main()
{
    int ci = 1024;
    const int &r1 = ci;
    //r1 = 100; //报错,r1是对常量的引用,不能通过r1进行修改
    ci = 100;   //通过ci修改可以

    return 0;
}

初始化和对const的引用

    //int &r2 = 42;  //报错,引用的是常量,前面得加const
    const int &r2 = 42;

对const的引用 可能并非const的对象

2.4.2 指针和const

const 指针

2.4.3 顶层const

2.4.4 constexpr和常量表达式

    int a = 20;
    constexpr int b = a;  //报错,检查到b不是常量表达式,因为b在运行时才能决定
    
    const int a = 20;     //常量表达式
    constexpr int b = a;  //因为a是常量表达式,所有这个没有问题

#include 

int size()
{
    return 30;
}

int main()
{
    constexpr int c = size();  //此时报错,如果在int size()前加上constexpr语法就对了
    return 0;
}

 指针和constexpr

与书上描述又点出入,编程时会报错,要进行一定的修改:

int main()
{
    static int j = 10;  //j本身不是常量,但是加上static修饰后,地址是常量
    constexpr int* p1 = &j;  //所以,这里拿j的地址给p1赋值,没有任何问题
    j = 50;                //地址是不会变,但是值是可以改变的,这个没有问题
    std::cout << j << std::endl;

    return 0;
}
2.5 处理类型

2.5.1 类型别名

 指针、常量和类型别名

 2.5.2 auto类型说明符 复合类型、常量和auto

    int i = 0;
    const int ci = i;
    auto &g = ci;
    //g = 20;  //报错,这里能推断出来是顶层const,g不能改变
    const auto &h = 42;  //这里又推断不出来,根据编译提示修改

2.5.3 decltype类型指示符

 ​​ decltype 和引用

 2.6 自定义数据结构

 2.6.1 定义Sales_data类型

#ifndef SALES_DATA_H
#define SALES_DATA_H
#include 

struct Sales_data {
    std::string bookNo;
    unsigned units_sold = 0;
    double revenue = 0.0;
};
#endif

2.6.2 使用Sales_data类

#include 
#include "Sales_data.h"

int main()
{
    Sales_data data1, data2;
    double price = 0;

    std::cin >> data1.bookNo >> data1.units_sold >> price;
    data1.revenue = data1.units_sold * price;
    std::cin >> data2.bookNo >> data2.units_sold >> price;
    data2.revenue = data2.units_sold * price;

    if (data1.bookNo == data2.bookNo) {
        unsigned totalCnt = data1.units_sold + data2.units_sold;
        double totalRevenue = data1.revenue + data2.revenue;
        std::cout << data1.bookNo << " " << totalCnt
            << " " << totalRevenue << std::endl;
        if (totalCnt != 0)
            std::cout << totalRevenue / totalCnt << std::endl;
        else
            std::cout << "(no sales)" << std::endl;
        return 0;
    }
    else {
        std::cerr << "Data must refer to the same ISBN" << std::endl;
        return -1;
    }
}


总结

默认状态下,const对象仅在文件内有效

const 指针

顶层const(头大)

 指针和constexpr

 ​​ decltype 和引用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号