现代 C++ 强调:

  • 基于堆栈的范围,而非堆或静态全局范围。

  • 自动类型推理,而非显式类型名称。

  • 智能指针而不是原始指针。

  • std::string 和 std::wstring 类型(请参见 <string>),而非原始 char[] 数组。

  • 标准模板库 (STL) 容器(例如 vector、list 和 map),而非原始数组或自定义容器。 请参见 <vector><list> 和 <map>

  • STL 算法,而非手动编码的算法。

  • 异常,可报告和处理错误条件。

  • 使用 STL std::atomic<>(请参见 <atomic>),而非其他线程间通信机制的无锁线程间通信。

  • 内联 lambda 函数,而非单独实现的小函数。

  • 基于范围的 for 循环,编写以 for ( for-range-declaration : expression ) 形式使用数组、STL 容器和 Windows 运行时集合的更可靠循环。 这是核心语言支持的一部分。有关更多信息,请参见基于范围的 for 语句 (C++)

传统C++:

 // circle and shape are user-defined types
circle* p = new circle( );
vector<shape*> v = load_shapes(); for( vector<circle*>::iterator i = v.begin(); i != v.end(); ++i ) {
if( *i && **i == *p )
cout << **i << “ is a match\n”;
} for( vector<circle*>::iterator i = v.begin();
i != v.end(); ++i ) {
delete *i; // not exception safe
} delete p;

现代C++:

#include <memory>
#include <vector>
// ...
// circle and shape are user-defined types
auto p = make_shared<circle>( );
vector<shared_ptr<shape>> v = load_shapes(); for_each( begin(v), end(v), [&]( const shared_ptr<shape>& s ) {
if( s && *s == *p )
cout << *s << " is a match\n";
} );

  在现代 C++ 中,不必使用 new/delete 或显式异常处理,因为可以使用智能指针来替代。 使用 auto 类型推导和 lambda 函数时,可以更快地编写代码、加强代码并更好地了解代码。 for_each 比 for 循环更整洁和易于使用,并且不容易发生意外错误。 可以使用样本和最少行数的代码来编写应用。 你可以确保代码异常安全和内存安全,并且没有要处理的分配/解除分配或错误代码。

  现代 C++ 整合两种多态性:编译时(通过模板)和运行时(通过继承和虚拟化)。 可以混合使用这两种多态性以增强效果。 STL 模板 shared_ptr 使用内部虚拟方法极为轻松地完成类型抹除。 但是,当模板是更好的选择时,请勿过度使用多态性的虚拟化。 模板可以非常强大。

  如果从其他语言(尤其是托管语言,其中大多数类型为引用类型,极少类型为值类型)转换到 C++,请注意 C++ 类在默认情况下是值类型。 但是,你可以将这些 C++ 类指定为引用类型,从而实现多态行为以支持面向对象的编程。 有帮助的观点:值类型与内存和布局控制更相关,而引用类型与支持多态性的基类和虚拟函数更相关。 默认情况下,值类型可以复制,每个值类型都具有一个复制构造函数和一个复制赋值运算符。 指定引用类型时,请将类设为不可复制(禁用复制构造函数和复制赋值运算符),并使用支持多态性的虚拟析构函数。 值类型还与内容有关,复制时,这将提供可单独修改的两个独立值。 但引用类型与标识(即对象类型)有关,因此有时称为多态类型。

  C++ 又一次兴起,因为功能再次占据首要位置。 当程序员的工作效率很重要时,Java 和 C# 等语言是很好的选择,但当功能和性能至关重要时,此类语言就暴露出了自身限制。要实现高效率和强大功能,特别是在硬件有限的设备上,现代 C++ 无可匹敌。

PS:个人觉得C++能够再次兴起,很大程度得益于手机等终端的发展,毕竟终端设备不可能像台式机,不用考虑硬件的去编程

现代C++学习笔记之二入门篇1的更多相关文章

  1. 现代C++学习笔记之二入门篇2,数据转换

    static_cast:    这种强制转换只会在编译时检查. 如果编译器检测到您尝试强制转换完全不兼容的类型,则static_cast会返回错误. 您还可以使用它在基类指针和派生类指针之间强制转换, ...

  2. 学习笔记-CCS-MSP430F5529[快速入门篇二]

    由于2021的全国电赛延期了,从今天开始打算好好整理一下使用CCS编程的经验,本篇笔记会好好整理一下我备赛期间用CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输入捕获,PWM波输出,UAR ...

  3. 学习笔记-CCS-MSP430F5529[快速入门篇一]

    由于最近竞赛需要使用TI公司的MSP430系列芯片,本人在最近两天匆忙的学习了一下MSP430F5529(下文统一称作5529)的使用.写下本文是为了将这两天学习内容做一个复习,并且将学习过程中遇到的 ...

  4. Vue 学习笔记之快速入门篇

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与 ...

  5. Java超简明入门学习笔记(二)

    Java编程思想第4版学习笔记(二) 第三章 操作符 & 第四章 控制执行流程(流程控制语句)         第三章和第四章的内容主要是讲操作符和流程控制语句,Java的大多数操作符和流程控 ...

  6. Redis 笔记 01:入门篇

    Redis 笔记 01:入门篇 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...

  7. C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)

    上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/392 ...

  8. guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  9. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见

    我们知道通过界面设置字段的change事件,是否是必填,是否可见非常容易.但有时我们需要动态地根据某些条件来设置,这时有需要通过js来动态地控制了. 下面分别介绍如何用js来动态设置.   一.动态设 ...

随机推荐

  1. minio  nginx 配置

    1. 参考配置  server { listen 80; server_name example.com; location / { proxy_set_header Host $http_host; ...

  2. 关于ant及svnant的一点随记

    在使用svnant的时候: 注意一下: 1.JDK版本,svnant目前更新到1.3.1,其中svnkit.jar是不支持1.7/1.8JDK的,容易出现各种错误 Ps:下载http://www.sv ...

  3. sqlserver sql语句查看分区记录数、查看记录所在分区

    select count(1) ,$PARTITION.WorkDatePFN(workdate) from imgfile group by $PARTITION.WorkDatePFN(workd ...

  4. 2、Flume1.7.0入门:安装、部署、及flume的案例

    一.什么是Flume? flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用. flume的特点: flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的 ...

  5. VS加载项目时报错 尚未配置为Web项目XXXX指定的本地IIS

    网上找的几个方法都不行 最后自己解决了.首先打开该项目得csproj文件,找到<ProjectExtensions>这个标签,是在最后部分,然后把<UseIIS>True< ...

  6. 一种js异步处理方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 2014.8.25 VS新建项目模板消失解决方法

    Vs2005 新建项目时windows应用程序模板消失问题解决方法: 1:进入C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE\ ...

  8. Java之Object类与instanceof关键字

    Object类是所有类的父类: 我们上下代码: package com.learn.chap03.sec14; public class A { // 上面类A继承了Object类,因此又可这样定义: ...

  9. python学习——练习题(3)

    """ 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? """ import math d ...

  10. leetcode421

    public class Solution { public int FindMaximumXOR(int[] nums) { , mask = ; ; i >= ; i--) { mask = ...