C11相对与C98加了不少东西,比如容器的初始化等,如果用C98标准初始化容器,那真的是很爽的。
_string拥有庞大字符串 c++-CSDN博客 二、C++98/03 中的三种 swap 实现 swap用于交换两个字符串的内容,不同实现的效率差异显著,核心是 “是否避免数据拷贝”。 结尾: 往期回顾: 《告别 “会用不会讲”:C++ string 底层原理拆解 + 手撕实现,面试 / 开发都适用》 结语:回溯 C++98/03 string 的拷贝与 swap 机制,既是理解早期内存管理智慧的钥匙
在C++98中,此操作的时间复杂度为O(1),因为标准要求size()必须在常数时间内完成 2.4 list:element access 链接: front back 函数声明 接口说明
std::auto_ptr 是 C++98 引入的一个简单的独占所有权智能指针,但在 C++11 中已经被弃用(deprecated),并在 C++17 中被移除。 这个示例仅用于演示 auto_ptr 的基本用法,不推荐在实际代码中使用): #include <iostream> #include <memory> // 包含 auto_ptr 的头文件(仅在 C+
一、语言核心特性革新:从语法糖到编译期逻辑重构自动类型推导:打破C++98的类型声明桎梏在C++98标准中,类型声明的冗余性给开发者带来了显著的代码负担。 在C++98中,尽管const关键字可用于声明常量,但并非所有const变量都能作为编译期常量使用。 模板别名与类型萃取:提升泛型代码可读性与表达力在C++98的泛型编程实践中,类型定义的冗长性是制约代码可读性的重要因素。 模板别名的核心优势不仅在于简洁性,更在于其支持模板部分特化,而这是C++98中typedef无法实现的功能。 override与final:增强继承体系的类型安全在C++98的继承体系中,虚函数重写机制存在潜在的类型安全隐患。
初始化方式 1.1. {}初始化 在C++98中,{}对数组或结构体元素进行统一的列表初始化,例如: // C++98 用{}对数组和结构体进行统一的列表初始化 int arr[] = { 10,20,34,2,2
原理: 拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类 不能调用 拷贝构造函数以及赋值运算符重载即可 拷贝和构造是在栈上生成对象 要实现以上操作,C+ +98和C++11中有不同的操作 C++98 将拷贝构造函数与赋值运算符重载只声明不定义,并且将其访问权限设置为私有即可。 static HeapOnly* CreateObject() { return new HeapOnly; } private: // C+ +98 派生类构造时会调用基类的构造函数 C++98中构造函数私有化,派生类中调不到基类的构造函数。 则无法继承 // C++98中构造函数私有化,派生类中调不到基类的构造函数。
函数 在C++11中,集合(列表)的初始化已经成为C++的一个基本功能,被称为“初始化列表(initializer list)” 示例代码: int a[] = { 1, 2, 3 }; //C+ +98支持,C++11支持 int b[]{2, 3, 4}; //C++98不支持,C++11支持 vector<int> c{ 1, 2, 3 }; //C++98不支持,C++ 11支持 map<int, float> d = {{ 1, 1.0f }, { 2, 2.0f }, { 3, 3.0f } }; //C++98不支持,C++11支持 在C++11中,自动变量和全局变量的初始化方式包括 初始化列表页可以用于函数返回的情况,与声明时使用列表初始化一样,列表初始化构造成什么类型是依据返回类型的: vector<int> Func() { return{ 1, 3 }; } 类成员初始化 C+ 在C++98中要求较高:如果静态成员不满足常量性,不能就地声明,且而且即使常量的静态成员也只能是整型或枚举型才能就地初始化。
从 C++98 引入到 C++17 弃用,异常说明经历了多次变革,其设计初衷与实际效果的差距引发了诸多争议。 一、异常说明的基本概念与语法 1.1 定义异常说明:从 C++98 到 C++11 的演进 在 C++98 中,异常说明是一种函数声明的语法,用于指定函数可能抛出的异常类型。 其基本形式如下: // C++98 异常说明语法 void func() throw(int, std::string); // 声明func可能抛出int或string类型的异常 void noexceptFunc bool b) noexcept(b); // 条件性不抛出异常 1.2 异常说明的分类 C++ 异常说明主要分为三类: ①动态异常说明(Dynamic Exception Specification) C+ ::terminate() ③弃用与保留 C++17 弃用动态异常说明(throw()) noexcept成为推荐的异常说明方式 二、违反异常说明的后果 2.1 动态异常说明的运行时行为 当函数违反 C+
1 -> C++11简介 在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了 C++98称为C++11之前的最新C++标准名称。 不过由于C++03(TC1)主要是对C++98标准中的漏洞 进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。 相比于 C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中 约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。 2 -> 统一的列表初始化 2.1 -> {}初始化 在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 3.1 -> auto 在C++98中auto是一个存储类型的说明符,表明变量是局部自动存储类型,但是局部域中定义局 部的变量默认就是自动存储类型,所以auto就没什么价值了。
C++11简介 在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。 不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。 相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。 在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 initializer_list<pair>的构造 map<string, string> dict = { {"sort", "排序"}, {"insert", "插入"} }; return 0; } 声明 auto 在C+
前言: 接下来我们将要讲解,相较于c++98,c++11中新增的语法以及如何使用~。我们首先来讲解:列表初始化。 下文预告:右值引用和移动语义 C++98中传统的{} 在c++98中的{},仅能初始化数组和结构体 #include<iostream> #include<vector> using namespace std; struct Point { int _x; int _y; }; int main() { //c++98的{},可以初始化数组和结构体 int arr[] = { 1,2,3,4,5 注:临时对象具有常性,所有必须要const引用 const Date& d = { 2025,4,17 }; //c++98本身支持单参数的类型转换,不用{}也可以 Date date1 = {
C++学习笔记: https://blog.csdn.net/djdjiejsn/category_12682189.html 前言: C++11相对于C++98和C++03而言增加了大约140个新特性 ⛳️持续改进阶段: 自C++98标准发布以来,C++标准已经经历了多次修订和扩展,每一次标准的更新都带来了新的特性、改进和优化,使得C++更加适应现代编程的需求和挑战。 以下是一些主要的变化: ●C++98:C++语言的第一个正式标准版本,包含了许多重要的特性,如类和对象、继承、虚函数和多态、封装、抽象类、模板、异常处理、标准模板库(STL)、命名空间等。 ●C++03:对C++98版本的漏洞做了部分修改。 1.2C++11: C++98是C++第一版的标准,C++03是对C++98中漏洞进行修复,C++11增加很多的新特性,和C++98/03有很大的区别了。
active { background: #00000000; color: black; } \ "); C++98不支持>>需要使用空格分开 将: QList<QPair <QString, QString>> 改为: QList<QPair<QString, QString> > C++98不支持for的直接范围循环 将: const QList<QPair<QString (int i = 0; i < tmp.count(); i++) { const QPair<QString, QString> &each = tmp.at(i); ... } C+
nullptr 是 C++11 中引入的一个新关键字,用于替代 C++98/03 中的 NULL 或字面量 0 来表示空指针。 原理 在 C++98/03 中,NULL 通常被定义为 (void*)0 或简单地 0。但是,使用 0 作为空指针常量有一个问题:0 既可以表示整数零,也可以表示空指针。 例如: void foo(int); void foo(void*); foo(NULL); // 在 C++98/03 中,这可能会导致歧义,因为 NULL 可能被解释为 int 或 void
C++11简介 在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。 不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。 相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。 统一的列表初始化 {}初始化 在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。
语法糖) 本节目标 C++11简介 列表初始化 变量类型推导 一.C++11简介 在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C+ 不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。 相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。 二.统一的列表初始化 2.1 {}初始化 在C++98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 3.1 auto 在C++98中auto是一个存储类型的说明符,表明变量是局部自动存储类型,但是局部域中定义局部的变量默认就是自动存储类型,所以auto就没什么价值了。
C++11简介 C++98/03:在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。 不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。 相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。 列表初始化 1. {}初始化 C++98中⼀般数组和结构体可以⽤{}进⾏初始化。 声明 1. auto 在C++98中auto是一个存储类型的说明符,表明变量是局部自动存储类型,但是局部域中定义局 部的变量默认就是自动存储类型,所以auto就没什么价值了。
本章将开始学习C++11的新语法特性,主要是一些比较常用的语法 一、C++11简介 发展历程: 在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C+ +98称为C++11之前的最新C++标准名 不过由于TC1主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准 从C++0x 相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。 相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率 二、列表初始化 背景引入: 在C++98中,标准允许使用花括号 2}; int x5{1+2}; // 数组 int arr1[5] {1,2,3,4,5}; int arr2[]{1,2,3,4,5}; // 动态数组,在C+
C++ 1998: C++98 C++ 标准化:C++98 是 C++ 的第一个正式标准版本,由 ISO/IEC 14882:1998 定义。 示例代码:C++98 的常见特性 以下是一个综合示例,展示了 C++98 中的几个核心特性,包括模板、标准库(STL)、命名空间和异常处理。 C++98 的局限性: 没有 auto 关键字:C++98 中没有 auto 关键字,因此类型推导只能依靠显式的类型声明。 C++03 的发布并没有像 C++98 到 C++11 之间的版本那样进行革命性的更新,因此它在功能上与 C++98 并无太大差异。 示例代码:C++98 和 C++03 的差异 由于 C++03 与 C++98 的差异主要体现在语言的细节上,因此以下示例代码在 C++03 中的表现与 C++98 是相同的。