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

嵌入式学习-C嘎嘎-Day08

嵌入式学习-C嘎嘎-Day08

1. nullptr

2. 类型推导

3. 初始化列表

4. 格式化输出

4.1 进制

4.2 域

5. 文件流

1. nullptr

nullptrC++11新关键字用于取代NULL

#include <iostream>

using namespace std;

void func(int)
{
    cout << "A" << endl;
}

void func(char*)
{
    cout << "B" << endl;
}


int main()
{
    func(NULL); // A
}

上面代码调用第二个函数比较合理但是实际运行调用第一个函数因为NULL就是0

#include <iostream>

using namespace std;

void func(int)
{
    cout << "A" << endl;
}

void func(char*)
{
    cout << "B" << endl;
}


int main()
{
    func(NULL); // A
    func(nullptr); // B
}

使用nullptr可以区分0

2. 类型推导

C++11可以使用autodecltype关键字进行类型推导

#include <iostream>

using namespace std;


int main()
{
    auto a = 1; // auto被自动推导为int
    auto b = new auto(2); // auto被自动推导为int*
    cout << a << endl; // 1
    cout << *b << endl; // 2
    delete b;
}

使用decltype推导表达式类型编译器只会计算类型而不计算数值

#include <iostream>

using namespace std;


int main()
{
    // decltype可以对表达式进行类型推导
    auto x = 1;
    auto y = 2;
    decltype(x+y) z = 123;
    cout << z << endl;
}

3. 初始化列表

C++11引入初始化列表语法(列表初始化、通用统一初始化、一致性初始化)使用{}进行初始化

#include <iostream>

using namespace std;

class Student
{
private:
    int id;
    string name;

public:
    Student(int id,string name):id{id},name{name}{}

    void print()
    {
        cout << id << " " << name << endl;
    }
};


int main()
{
    int a{1};
    cout << a << endl;

    int b{};
    cout << b << endl; // 0

    int arr[] = {1,2,4}; // 推导数组长度为3
    for(int i=0;i<3;i++)
        cout << arr[i] << " ";
    cout << endl;

    Student s = {1,"张三"};
    s.print();
}

【思考】一共学习哪些C++11新特性

  • for-each
  • array
  • nullptr
  • 类型推导
  • 初始化列表窄化
  • 智能指针
  • 继承构造
  • override关键字
  • 类型转换
  • constexpr

4. 格式化输出

4.1 进制

使用cout输出可以切换进制

#include <iostream>

using namespace std;


int main()
{
    cout << dec; // 切换到十进制输出(默认)
    cout << 1234 << endl;
    cout << oct; // 切换到八进制
    cout << 8 << endl; // 10
    cout << hex; //切换到十六进制
    cout << 255 << endl; // ff
}

为了区分不同进制显示可以增加显示进制功能

#include <iostream>

using namespace std;


int main()
{
    cout << showbase; // 进制显示
    cout << dec << 1234 << endl; // 十进制就是正常显示
    cout << oct << 3434 << endl; // 八进制前面补0
    cout << hex << 2344 << endl; // 十六进制前面补0x
    cout << noshowbase; // 关闭进制显示
    cout << dec << 1234 << endl;
    cout << oct << 3434 << endl;
    cout << hex << 2344 << endl;
}

4.2

可以使用setw函数指定输出内容占用宽度

  • 如果设定宽度大于数据本身宽度显示设定宽度
  • 如果设定宽度小于数据本身宽度显示数据本身宽度

每次需要输出使用setw函数使用前需要引入头文件 #include <iomanip>

#include <iostream>
#include <iomanip> // 头文件

using namespace std;


int main()
{
   cout << setw(10) << "12c";
   cout << setw(6) << "12c8787878";
   cout << setw(6) << "12c";
}

5. 文件

使用C++实现一个文件拷贝程序

#include <iostream>
#include <fstream> // 头文件

using namespace std;


int main()
{
   ifstream ifs("E:\\bbq.mp4",ios_base::binary); // 文件输入流对象
   if(!ifs)
   {
       cout << "读取失败!" << endl;
       return 0;
   }
   ofstream ofs("C:\\Users\\jngwu\\Desktop\\bbq(2).mp4",
                ios_base::binary); // 文件输出流对象
   if(!ofs)
   {
       cout << "无法保存!" << endl;
       return 0;
   }

   // 使用数组作为缓存
   char buffer[1024];
   long long size = 0; // 文件大小
   long long has_copied = 0; // 已经读写的大小

   // 文件指针从头部移动到尾部
   ifs.seekg(0,ios::end);
   streampos ps = ifs.tellg(); // 获取文件的移动量
   cout << "移动量:" << ps << endl;
   size = ps;
   // 文件指针移动回头部
   ifs.seekg(0,ios::beg);
   // 循环读写
   while(ifs)
   {
       // 读取数据
       ifs.read(buffer,1024);
       //gcount返回39行读取的数据量
       int copy_size = ifs.gcount();
       has_copied += copy_size; // 累积读写的数据量
       // 输出数据
       ofs.write(buffer,copy_size);
       // 百分比显示
       cout << 100*has_copied/size << endl;
   }
   // 收尾
   ifs.close();
   ofs.flush();
   ifs.close();
}

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

相关文章:

  • 【FPGA-MicroBlaze】串口收发以及相关函数讲解
  • 【食品包装原纸】市场未来几年行业竞争将更加激烈,尤其在中国市场
  • 取电快充协议芯片,支持全协议、内部集成LDO支持从UART串口读取电压电流消息
  • 【C++】继承(inheritance)
  • 基于物联网设计的人工淡水湖养殖系统(华为云IOT)_253
  • 如何在 MySQL 中进行数据导入和导出?
  • 第三百二十九节 Java网络教程 - Java网络UDP套接字
  • Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
  • opencv-python 分离边缘粘连的物体(距离变换)
  • 在 Vue 项目中使用 betterScroll 的详细教程及原理解析
  • Spring 框架的介绍(Java EE 学习笔记02)
  • <OS 有关> ubuntu 24 安装 VMware Workstaion
  • 初阶数据结构之栈的实现
  • 【vue3+Typescript】unapp+stompsj模式下替代plus-websocket的封装模块
  • 百度Q3财报:净利润增长17%超预期 文心大模型日调用量增30倍达15亿
  • 通过轻易云平台实现聚水潭数据高效集成到MySQL的技术方案
  • stable diffusion生成模型
  • [Unity Demo]从零开始制作空洞骑士Hollow Knight第二十集:制作专门渲染HUD的相机HUD Camera和画布HUD Canvas
  • C0031.在Clion中使用mingw编译器来编译opencv的配置方法
  • 02. Python基础知识
  • js版本之ES5特性简述【String、Function、JSON、其他】(二)
  • MySQL系列之身份鉴别(安全)
  • Unet++改进35:添加FastKANConv2DLayer(2024最新改进方法)
  • 本地项目提交到gitee
  • 如何高效集成YS网店客户和组织映射数据到MongoDB
  • PHP导出EXCEL含合计行,设置单元格格式