大部分同学应该都发现了,单例的destoryInstance函数没有在delete之后将s_pInstance 置空。本次使用没问题,但下次getInstance就会返回一个野指针。
C++11, C++14, 以及 C++17. 我猜你已经看出了其中的命名模式: 今年(2017)的晚些时候,我们便会迎来新的C++标准(C++17). 今年的3月份, C++17已经达到了标准草案阶段. 在我深入新标准的细节之前, 让我们先来总体浏览一下C++17.(译注:作者的文章写于2017年初,当时C++17标准仍未正式发布)
C++11增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以最近的几篇文章主要讲解实际中比较实用的语法
C++是一门以C为基础发展而来的一门面向对象的高级程序设计语言,从1983年由Bjarne Stroustrup教授在贝尔实验室创立开始至今,已有30多个年头。C++从最初的C with class,经历了从C++98、C++ 03、C++ 11、C++ 14再到C++17多次标准化改造,功能得到了极大的丰富,已经演变为一门集面向过程、面向对象、函数式、泛型和元编程等多种编程范式的复杂编程语言,入门具有一定的难度。由于C++过于复杂,并且经历了长时间的发展演变,目前对于C++标准支持的较好主要有GNU C++和Visual C++,严格来说,目前还没有一个完全支持ISO C++的版本。
虽然C++03提供了多样的对象初始化方式, 但不能提供自定义类型对象的大括号初始化方式,也不能在使用new[]的时候初始化POD 数组。幸好,C++11扩充了大括号初始化功能,弥补了C++03的不足。
一门语言如果太啰嗦了,不仅会为阅读带来障碍,而且还是许多错误的根源。所以从C语言继承而来的关键词auto在C++11中有了新的定义,可以进行自动类型推断。
作者 | Bartlomiej Filipek 译者 | 王强 策划 | 万佳 C++ 发展得非常快!例如,C++ 标准的页数从 C++98/03 的 879 页增加到了 C++20 的 1834 页,多了近 1000 页!更重要的是,C++ 每次修订后,我们都会获得几十个新特性。你需要学习所有这些东西才能写出好代码吗?如何在当今的 C++ 世界中保持理智? 介 绍 你可能知道 C++ 是一种复杂的语言。我甚至发现了一整页 Wiki 是讲对 Cpp 的批判的。现代 C++ 甚至为生态添加了更多内容。 以
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了 C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞 进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。 从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于 C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中 约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言, C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更 强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多。
什么,delete居然还有这种神奇的用法?我确实以前没看过。所以我跑到实验室,自己查了些资料,大概明白这些代码是个什么意思了,所以记录下来。
上面的代码,无论是在 gcc/clang 还是 g++/clang++ 上,编译都是不能通过的,报错如下:
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。
C++03是指C++语言的第三个标准,也称为ISO/IEC 14882:2003。它于2003年发布,并取代了之前的C++98标准。在C++03中,添加了一些新特性和修复了一些错误,以提供更好的编程体验和更高的代码可移植性。
赖勇浩(http://laiyonghao.com) 声明:本文源自 Danny Kalev 在 2011 年 6 月 21 日发表的《The Biggest Changes in C++11(and Why You Should Care)》一文,几乎所有内容都搬了过来,但不是全文照译,有困惑之处,请参详原文(http://www.softwarequalityconnection.com/2011/06/the-biggest-changes-in-c11-and-why-you-should-care/ )。 注:作者 Danny Kalev 曾是 C++ 标准委员会成员。
Never allow an error to be reported from a destructor, a resource deallocation function (e.g., operator delete), or a swap function using throw. It is nearly impossible to write useful code if these operations can fail, and even if something does go wrong it nearly never makes any sense to retry. Specifically, types whose destructors might throw an exception are flatly forbidden from use with the C++ Standard Library. Most destructors are now implicitly noexcept by default.
在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。比如:
/*********************************************************** 关于书: 书是我从网上找到的effective Modern C++的样章,内容只到条款4就没有了, 所以现阶段我只能翻译到条款4,不过以后有机会我会继续翻译的。 如果读者找到了完整的版本,欢迎大家发给我。1021842556@qq.com effective Modern C++的样章的下载地址http://pan.baidu.com/s/1ntKBlpf 提取密码是upkw 关于我:
1982年,Bjarne Stroustrup 博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,所以将其命名为C++。简言之,C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。C++ 的发展史如下:
上面的参数args前面有省略号,所以它就是一个可变模版参数,我们把带省略号的参数称为“参数 包”,它里面包含了0到N(N>=0)个模版参数。我们无法直接获取参数包args中的每个参数的,只能通过展开参数包的方式来获取参数包中的每个参数,这是使用可变模版参数的一个主要特点,也是最大的难点,即如何展开可变模版参数。
问题 如果 Test 就是一个很普通的类,那么下面的两句代码有什么不同么? Test* test = new Test; Test* test = new Test(); 回答 确实会有些差异。 C++ 1998 中,有两种初始化类型:zero 和 default 初始化。 C++ 2003 中,多了一种:value 初始化。 假设有以下代码, struct A { int m; }; // POD struct B { ~B(); int m; }; // non-POD, compiler gener
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个重点去学习。C++11增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以本期博客主要讲解实际中比较实用的语法。
那天,我被拉入了一个群······ 一个月后··· 又一个月后··· 【完】 本文仅供娱乐,切莫当真。 出道就是学的C++,工作用了几年后,自以为掌握了这一门语言。没想到真是图样图森破! C++经过多
Thoughts about C++ in the modern world. 一些关于当代C++的思考。 Debates about the present state of C++ in t
其中,K&R C 已经过时,不再使用,而 ANSI C、C99、C11 和 C18 都是现代 C 语言标准,但在实际开发中,使用最广泛的是 ANSI C 和 C99。
C++98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。举个例子:
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个重点去学习。C++11增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以本篇博文主要讲解实际中比较实用的语法。
写时复制(Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略。其核心思想是,如果有多个调用者(callers)同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这过程对其他的调用者都是透明的。此作法主要的优点是如果调用者没有修改该资源,就不会有副本(private copy)被创建,因此多个调用者只是读取操作时可以共享同一份资源。
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架
JetBrains 每年都会进行开发者生态系统调查,以了解开发者社区的概况,去年的结果终于出炉了,今天特意去看了一下想关注一下C++标准的使用情况。
TIOBE 2020 年 9 月份的编程语言排行榜已经公布,官方的标题是:C++ 表现突出。
C++11-列表初始化/变量类型推导/范围for/final&override/默认成员函数控制 零、前言 一、C++11简介 二、列表初始化 1、内置类型列表初始化 2、自定义类型列表初始化 三、变量类型推导 1、auto类型推导 2、decltype类型推导 四、范围for循环 五、final和override 1、final 2、override 六、默认成员函数控制 零、前言 本章将开始学习C++11的新语法特性,主要是一些比较常用的语法 一、C++11简介 发展历程: 在2003年C++
现代的编程语言,不管是动态语言(JavaScript、Python 等),还是静态语言(Go、Rust 等),大都支持自动类型推导(type deduction)。
RSS https://github.com/wanghenshui/cppweeklynews/releases.atom
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架。
单个线程工作一般而言是可以的,但复杂的工程项目可能需要异步多线程多进程,这个时候需要线程池,异步任务操作了。 参考资料:
单个线程工作一般而言是可以的,但复杂的工程项目可能需要异步多线程多进程,这个时候需要线程池,异步任务操作了。
1989年 C++2.0 1994年 ANSI C++ 1998年 C++98 加入STL(Standard Template Library)-泛型设计
在 2003 年 C++ 标准委员会曾经提交了一份技术勘误表(简称TC1),使得 C++03 这个名字已经取代了 C++98 称为 C++11 之前的最新 C++ 标准名称。不过由于 C++03(TC1) 主要是对 C++98 标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为 C++98/03 标准。
一、单选题(本大题共6小题, 每小题4分, 共24分。) 1、ROS2默认支持的操作系统平台不包括( )。 A. windows; B. linux; C. macos; D. aliyun 2、ROS2主要使用的C++标准为( )。 A. C++03; B. C++11; C. C++14; D. C++17 3、ROS2中编译功能包主要使用命令是( ) A. catkin_make; B. ament build; C. colcon build; D. catkin build 4、C++中uint8_t对应的ROS2的类型是( )。 A. bool;B. byte;C. int8;D. char 5、ROS2中QoS重要的功能包括( )。 A.建立通信; B. 防止死机; C. 避免“过时”数据; D. 监控节点 6、下面命名不符合ROS2规范的是( )。 A.abc; B.abc123;C.123;D._abc
STL(Standard Template Library)是C++编程语言的一个标准库,包含了一系列模板类和函数,用于实现常见的数据结构和算法。它分为容器(Containers)、迭代器(Iterators)、算法(Algorithms)和配接器(Adapters)四个部分。STL的目的是提供高效、灵活、可复用的代码,以便快速构建高质量的C++程序。通过使用STL,程序员可以避免重新发明轮子,提高代码的可读性和可维护性。
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
(而我此处的eglibc 2.17,和那人的glibc-2.16.0,都是需要支持c11的gcc的)
【K&R C】 1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The C Programming Language》的第一版(按照惯例,经典著作一定有简称,该著作简称为 K&R),书末的参考指南 (Reference Manual) 一节给出了当时 C 语言的完整定义,成为那时 C 语言事实上的标准,人们称之为 K&R C。从这一年以后,C 语言被移植到了各种机型上,并受到了广泛的支持,使 C 语言在当时的软件开发中几乎一统天下。
个人觉得最核心的变化是右值引用的引入,右值引用是 C++ 走向现代化的最重要一步。建议每一位 C++ 开发者都应该深入去了解并充分使用它。 右值引用是 C++11 中最重要的新特性之一,它解决了 C++ 中大量的历史遗留问题,使 C++ 标准库的实现在多种场景下消除了不必要的额外开销(如 std::vector, std::string),也使得另外一些标准库(如 std::unique_ptr, std::function)成为可能。即使你并不直接使用右值引用,也可以通过标准库,间接从这一新特性中受益。
几十年来,嵌入式软件工程师们一直在争论是否应该使用C++替代C语言进行开发工作。根据2019年IEEE和github的市场调查显示,微控制器制造商提供的软件大部分都是由C语言编写。
ncnn是腾讯优图实验室第一次对外公开深度学习的研究成果。作为一个为手机端极致优化的高性能神经网络前向计算框架,ncnn于2017年7月正式开源,在设计之初便将手机端的特殊场景融入核心理念,成为业界首个为移动端优化的开源神经网络推断库。 1月19日,腾讯优图举办了优Tech线上沙龙,ncnn开源负责人、腾讯优图实验室高级研究员nihui围绕《ncnn的设计理念和软件工程》进行了直播分享,讲述了ncnn项目的设计动机、架构设计以及运作多年所依赖的软件工程方法。 01 ncnn四大设计理念 据nihui介绍,n
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。大概意思就是:允许一个对象再创建另外一个可定制的对象,根本无需知道对象创建的细节。其工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。其UML类图如下:
ncnn是腾讯优图实验室第一次对外公开深度学习的研究成果。作为一个为手机端极致优化的高性能神经网络前向计算框架,ncnn于2017年7月正式开源,在设计之初便将手机端的特殊场景融入核心理念,成为业界首个为移动端优化的开源神经网络推断库。
众所周知C++ 11引入了nullptr,关于C++11新特性,可以看我之前的文章《c++11新特性,所有知识点都在这了!》。nullptr使用代码如下:
领取专属 10元无门槛券
手把手带您无忧上云