【C++11:实用特性】教程文章相关的互联网学习教程文章

c++语言特性深究

都说c++难学难精通,所以学习c++时要注意不要半瓶子晃荡,要对概念有着清晰的认识,不懂就问,慢慢积累,练习,自然就不难了。问题:引用可以作为容器的参数吗?权威的书都说不可以,但是理由却不是很清楚,查阅相关资料,大概可以说泛型的参数要求是object type,而引用不是。同理,容器也没有存储函数的吧,python中应该可以这么做。类型萃取是什么?是java中的反射吗? 参考资料:http://www.cplusplus.com/reference/type_tra...

C++ 模板常见特性(函数模板、类模板)【代码】

背景 C++ 是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量。 C++ 提高代码的可重用性主要有两方面:继承 模板继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的特性。 使用「模板」的特性设计,实际上也就是「泛型」程序设计。 函数模板 01 变量交换函数模板 假设我们设计一个交换两个整型变量的值的函数,代码如下: // 交换两个整型变量的值的Swap函数: void Swap(int & x,int & y) {int t...

visual studio code(vscode) 配置在terminal进行运行代码并且支持c++11特性【代码】【图】

1.点击设置 点击CodeRunner的小齿轮,点击configure extension settings2.点击映射 点击executor map中的Edit in settings.json3.粘贴代码 粘贴如下代码,按下command + s 进行保存 {"code-runner.runInTerminal": true,"C_Cpp.default.cppStandard": "c++11","code-runner.executorMap": {"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -std=c++11 && $dir$fileNameWithoutExt"},"files.associations": {"typeinfo": ...

C++11常用特性介绍——左值引用、右值引用

一、左值、右值1)左值:可以放在赋值号左侧、可以被赋值的值;左值必须要在内存中有实体。  2)右值:必须放在赋值号右侧、取出值赋值给其它变量;右值可以在内存中也可以在CPU寄存器中。 二、引用引用是C++语法做优化,引用的本质还是靠指针来实现的,引用相当于变量的别名。声明引用的时候必须初始化,且一旦绑定,不能对引用重定义,对引用的一切操作,相当于对原对象的操作。 三、左值引用C++11之前,没有左值引用和右值引用...

C++11常用特性介绍——array容器

std::array是具有固定大小的数组,支持快速随机访问,不能添加或删除元素,定义于头文件<array>中。 一、概要array是C++11新引入的容器类型,与内置数组相比,array是一种更容易使用,更加安全的数组类型,可替代内置数组,作为数组升级版,继承数组最本特性,同时融入部分操作。 二、定义与初始化array和数组一样,为固定大小容器类型,定义时即需声明大小与类型1)内置数组初始化int array[10] = {0};int array[10] = {1,2,3,4,5...

C++2.0新特性(六)——<Smart Pointer(智能指针)之shared_ptr>【代码】【图】

Smart Pointer(智能指针)指的是一类指针,并不是单一某一个指针,它能知道自己被引用的个数以至于在最后一个引用消失时销毁它指向的对象,本文主要介绍C++2.0提供的新东西 一、Smart Pointer分类C++2.0提供了两大类型的智能指针,该模块都被定义于头文件<memory>: - 文章图片" /> 二、标准库提供的智能指针类 2.1 class shared_ptr提供了共享式拥有语义,也就是说当对个shared_ptr可以共享(或拥有)同一个对象,对象的最后...

c++11新特性之右值引用【图】

我们说过一个变量分为两个部分,左值和右值 左值代表变量内存区域 右值代码内存区域所存的值 我们平时说的引用是左值引用,c++11引入了右值引用 右值引用就是绑定到右值上的引用。用&&进行定义 类型 &&引用名 = 表达式 我们看几个例子了解一下double r = 10; double &r1 = r;//正确,左值引用 double &r2 = r + 10;//错误,左值引用右边必须是变量,不可以是表达式 double &&r3 = r;//错误,右值引用右边必须是常量或者表达式 d...

【C++11新特性】 C++11智能指针之weak_ptr

如题,我们今天要讲的是C++11引入的三种智能指针中的最后一个:weak_ptr。在学习weak_ptr之前最好对shared_ptr有所了解。如果你还不知道shared_ptr是何物,可以看看我的另一篇文章【C++11新特性】 C++11智能指针之shared_ptr。 1、为什么需要weak_ptr?在正式介绍weak_ptr之前,我们先来回忆一下shared_ptr的一些知识。我们知道shared_ptr是采用引用计数的智能指针,多个shared_ptr实例可以指向同一个动态对象,并维护了一个共享的...

C++三大特性之多态(详细)

原文链接:https://blog.csdn.net/skysongkran/article/details/82012698https://blog.csdn.net/skysongkran/article/details/82012698

c++11特性学习总结【代码】【图】

ubuntu 16.04 自带gcc 5.4 支持c++11 ubuntu 18.04 自带gcc 7.3 支持c++14 查看编译器支持: c++11 c++14 c++17 c++11 featurenullptr/constexpr enum class auto/decltype for iteration initialize_list lamda template rvalue/movenullptr 以前的编译器实现,可能会把NULL定义为0.所以,当你有两个同名函数foo(int),foo(char*)时,foo(NULL)你的本意可能是调用后者,但实际调用的是前者.nullptr的引入就是为了解决这个问题. void foo...

c++类的静态成员特性

1、我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 2、静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化。 3、如果把函数成员声...

【从零学C++11(中)】移动语义、右值引用、std::move()、完美转发等新特性【代码】

C++118. 默认函数控制显式缺省函数删除默认函数9. 右值引用【★】移动语义C++11中的右值右值引用std::move()注意点完美转发8. 默认函数控制 在C++中对于空类编译器会生成一些默认的成员函数,比如:构造函数、拷贝构造函数、运算符重载、析构函数、&和const&的重载、移动构造、移动拷贝构造等函数。 如果在类中显式定义了,编译器将不会重新生成默认版本。有时候这样的规则可能被忘记,最常见的是声明了带参数的构造函数,必要时则...

【从零学C++11(下)】lambda表达式、线程库、原子操作库等新特性【代码】【图】

C++1110. lambda表达式【★】语法捕获列表函数对象与lambda表达式对比11. 线程库【★】线程的启动线程的结束原子性操作库(atomic)10. lambda表达式【★】 例如在C++98中,如果想要对一个数据集合中的元素进行排序,可以使用std::sort方法,具体如下: #include <algorithm> #include <functional> int main(){int array[] = {4,1,8,5,3,7,0,9,2,6};// 默认按照小于比较,排出来结果是升序std::sort(array, array+sizeof(array)/s...

C++11 新特性学习【代码】

在Linux下编译C++11 #include<typeinfo> int main() {auto a=10;cout<<typeid(a).name()<<endl; //得到a的类型,只是一个字符串return 0; } 编译需要加-std=c++11,如下例:auto C++11中引入auto第一种作用是为了自动类型推导 auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以大大简化我们的编程工作 auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不...

c++11新特性(3)之可变参数模板(variadic template)

可变参数模板(variadic template) 听说这是一个c++新特性 中最大的改动,我的认识有限只能写一些十分基础的理解,但我会持续更新。 所谓可变参数模板,就是模板函数的参数是可以变化的,不是一个、两个参数,而是一包参数,这一包参数可以是0个到n个,这种将参数打包的操作就是可变参数模板。具体的语法如下:template<typename T,typename... Args> void printX(T& firstarg,Args&... args);我们也可以得到这个包的大小:这是承...