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

C++ 11新特性之语法甜点1

概述

        C++ 11中引入了许多简化编程工作的语法上的新特性,我们暂且美其名曰:“语法甜点”。下面,我们将对这些“语法甜点”一一进行介绍。

语法甜点1:序列for循环

        序列for循环是一种简化的for循环,可用于遍历一组序列,包括:各种容器、string、数组、初始化列表以及由begin和end函数定义的序列。

#include <iostream>
#include <vector>
using namespace std;int main()
{vector<int> vctTemp{1, 2, 3};for (auto a : vctTemp){cout << a << endl;}return 0;
}

语法甜点2:成员变量初始化

        与Java、C#中的用法一样,可以对成员变量进行就地初始化。

class CPerson
{
private:int m_nAge = 10;string m_strName = "Mike";
};

语法甜点3:统一的初始化语法

        在引入C++ 11之前,有各种不同的初始化语法。在C++ 11中,仍可以使用这些初始化语法,但也可以选择使用新引入的统一的初始化语法。统一的初始化语法用一对大括号{}表示,使用{}初始化语法还可有效地避免窄转换。

#include <iostream>
#include <vector>
using namespace std;class CPerson
{
public:int m_nAge = 10;string m_strName = "Mike";
};int main()
{int a{5};char c{'X'};int p[5] = {1, 2, 3, 4, 5};vector<int> vctTemp{1, 2, 3};CPerson person{10, "Mike"};// b赋值成5,发生了窄转换int b = 5.3;// 会提示编译错误,避免了窄转换int d{5.3};return 0;
}

语法甜点4:nullptr

        nullptr是C++ 11中新加的一个关键字,用于标识空指针。引入nullptr后,可以解决某些函数重载时的二义性问题。

#include <iostream>
using namespace std;void Test(int a)
{cout << a << endl;
}void Test(char *p)
{cout << p << endl;
}int main()
{int *p = nullptr;int *q = NULL;// 两个指针值是相等的,bEqual为truebool bEqual = (p == q);// 编译失败,nullptr不是转换为intint a = nullptr;// 在C++ 98中编译失败,有二义性;在C++ 11中调用F(int)Test(0);// 调用F(char *)Test(nullptr);return 0;
}

语法甜点5:委托构造函数

        在引入C++ 11之前,如果某个类有多个重载的构造函数,且这些构造函数中有一些共同的初始化逻辑,通常都需要再编写一个带参数的初始化函数,然后在这些构造函数中调用这个初始化函数。在C++ 11中,再也不用这么麻烦了。我们可以实现一个最基础的构造函数,其他构造函数都调用这个构造函数。

#include <iostream>
#include <sstream>
using namespace std;class CPerson
{
public:CPerson() : CPerson(0, "") { NULL; }CPerson(int nAge) : CPerson(nAge, "") { NULL; }CPerson(int nAge, const string &strName){stringstream ss;ss << strName << "is " << nAge << "years old.";m_strInfo = ss.str();}private:string m_strInfo;
};int main()
{CPerson person(10, "Mike");return 0;
}

http://www.lryc.cn/news/291150.html

相关文章:

  • 【智能家居】6、语音控制及网络控制代码实现
  • Windows断开映射磁盘提示“此网络连接不存在”,并且该磁盘直在资源管理器中
  • Java项目要不要部署在Docker里?
  • Linux 入门基础知识(一)—— Linux的基本使用
  • 纯静态微信小程序水果商城
  • 操作系统-线程的实现方式和多线程模型(用户级线程 内核级线程 多线程模型的情况)和线程的状态,转换,组织,控制
  • 计算机网络 应用层
  • 拥有你的微调大模型,零代码定制+算力免费送
  • 《Docker技术革命:从虚拟机到容器化,全面解析Docker的原理与应用-上篇》
  • C,C++,C# 的区别
  • 操作筛选器的 1 个应用实例:自动启用事务
  • 搭建基于Java的分布式爬虫系统
  • rancher证书过期问题处理
  • Spring Boot 中文件上传
  • 2023年06月CCF-GESP编程能力等级认证Python编程一级真题解析
  • unity 使用数字图片来代替数字0到9显示
  • 单片机如何实现延时1ms或者1us
  • 全国网络安全行业职业技能大赛WP
  • 【Python函数与模块】(7)模块的分类与好处
  • 如何安全地多开Facebook/Twitter/TK/Ins等账号?
  • ChatGPT学python: 用json文件传参
  • 【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
  • 已实现:vue、h5项目如何使用echarts实现雷达图、六边形图表
  • JUC并发编程-四大函数式接口、Stream 流式计算、ForkJoin并行执行任务
  • 【Tomcat与网络4】Tomcat的连接器设计
  • k8s中调整Pod数量限制的方法
  • 在Java中,实现扩展性通常有几种方法,其中包括接口、抽象类、插件架构和服务加载等方式
  • 【乳腺肿瘤诊断分类及预测】基于自适应SPREAD-PNN概率神经网络
  • 蓝桥杯AT24C02问题记录
  • adb控制设备状态