C++ 封装 我们都知道多核编程常用锁避免多个线程在修改同一个数据时产生race condition。当锁成为性能瓶颈时,我们又总想试着绕开它,而不可避免地接触了原子指令。 C++11正式引入了原子指令,我们就以其语法描述。 顾名思义,原子指令是对软件不可再分的指令,比如x.fetch_add(n)指原子地给x加上n,这个指令对软件要么没做,要么完成,不会观察到中间状态。 为了解决这个问题,CPU和编译器提供了memory fence,让用户可以声明访存指令间的可见性(visibility)关系,boost和C++11对memory fence做了抽象,总结为如下几种memory 理解C++的原子操作 事实上,Sequentially-consistent ordering是目前绝大多数编译器的缺省设置。 C++11所规定的这6种模式,其实并不是限制(或者规定)两个线程该怎样同步执行,而是在规定一个线程内的指令该怎样执行。是的,我知道这部分的文档(规定)以及给出的例子里面,满屏都是多线程。
singleton // T must be: no-throw default constructible and no-throw destructible template <typename T> struct Singleton { private: struct object_creator { // This constructor does nothing more than ensure that instance() // is call
1.C++11的发展历史 C++11 是 C++ 的第⼆个主要版本,并且是从 C++98 起的最重要更新。它引⼊了⼤量更改,标准化了既 有实践,并改进了对 C++ 程序员可⽤的抽象。 C++03 与 C++11 期间花了 8 年时间,故⽽这是迄今为⽌最⻓的版本间隔。从那时起,C++ 有规律地每 3 年更新⼀次。 +语法中就有引⽤的语法,⽽C++11中新增了的右值引⽤语法特性,C++11之后我们之前用到的引⽤就叫做左值引⽤。 纯右值和将亡值C++11中提出的,C++11中的纯右值概念划分等价于 C++98中的右值。 C++还⽀持更复杂的包扩展,直接将参数包依次展开依次作为实参给⼀个函数去处理。
C++ 11 的一些新特性 原始字面量 R("string...") /text.cc 上面换了个行)"; std::cout << str << std::endl; } [Running] cd "/root/code-server/c11 -new/" && g++ 字符串字面量.cc -o 字符串字面量 && "/root/code-server/c11-new/"字符串字面量 ../..
注:作者 Danny Kalev 曾是 C++ 标准委员会成员。 Lambda 表达式 Lambda 表达式的形式是这样的: [cpp] view plaincopyprint? vector<int> vi; typedef decltype (vi.begin()) CIT; CIT another_const_iterator; 统一的初始化语法 C+ delete; }; NoCopy a; NoCopy b(a); //编译错误,拷贝构造函数是 deleted 函数 nullptr nullptr 是一个新的 C+ 下面介绍一些 C++11 的标准库新特性: 线程库 从程序员的角度来看,C++11 最重要的特性就是并发了。 如果觉得 C++ 变化太大了,不必惊恐,花点时间来学习就好了。可能在你融会贯通新特性以后,你会同意 Stroustrup 的观点:C++11 是一门新的语言——一个更好的 C++。
如上代码,自我赋值的时候会出现删除自身数据的操作,这样非常危急。由于p变成了野指针。
nullptr\text{nullptr}nullptr 的出现是为了取代 NULL\text{NULL}NULL,避免 NULL\text{NULL}NULL 的二义性。
如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11。当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢? 在我看来,答案毫无疑问是肯定的。 C++ 11可以让你的代码更短、更清晰、和更易于阅读,这可以让你的效率更高。 C++ 11提供了一种方法来检查先决条件并尽早的在可能的时机捕获错误-编译过程中,在你运行代码前。这就是理由9。 这是通过静态断言(static_assert)和类别属性模版实现的。 现在开始掌握C++ 11 在C++ 11标准中除了上描述的还有更多的改动和新功能,它需要一整本数来描述。不过,我相信它们是值得你花时间去学习的。你将省去以往花在提高效率上的时间。 很多主流的编译器已经开始支持C++ 11的一些标准了。还等什么?开始吧! 推荐: http://www.cnblogs.com/roucheng/p/3456005.html
一、C++11简介 1998年是C++标准委员会成立的第一年,本来计划以后每5年视实际需要更新一次标准,C++国际标准委员会在研究C++ 03的下一个版本的时候,一开始计划是2007年发布,所以最初这个标准叫 结果2010年的时候也没完成,最后在2011年终于完成了C++标准。所以最终定名为C++11。 从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。 相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多,是C++的重点内容。 提供了initializer_list类,此类型用于访问C++初始化列表中的值,该列表是const T类型的元素列表。 六、右值引用和移动语义 传统的C++语法中就有引用的语法,而C++11中新增了的右值引用语法特性,无论左值引用还是右值引用,都是给对象取别名。 1. 什么是左值?什么是左值引用?
Qgit QGit是一种简单、快速、直观又强大的GUI Git客户软件,它是用Qt/C++编写的。 它为用户提供了一个漂亮的用户界面,让用户可以密切关注不同的开发分支,从而浏览修订历史记录,并以图形化方式查看补丁内容和已变更的文件。 主页链接:http://www.collab.net/products/giteye 11.
有时候,我们需要在命令行中使用远程的GUI程序,这样我们就需要x11转发的来进行访问; Linux平台下不需要特别的配置,假如我们要远程的机器是centos机器,只要做如下配置即可: #vi /etc/ ssh/sshd_config 取消这一行的注释——如果没有这一行则手动添加之: X11Forwrding yes 之后重启sshd服务; Linux 用户客户端这边使用如下命令,进入ssh,然后打开图形界面即可 : ssh -X user@192.168.0.200 //-X参数表示转发X11数据, 把用户名称user 以及服务器S的ip地址替换为你自己的 ? 如果配置不行,请参考修改 ~/.ssh/config 文件,添加如下条目: ForwardX11Trusted yes ForwardX11 yes XAuthLocation /opt/X11/bin 文章原地址:https://www.cnblogs.com/xuyaowen/p/ssh-X11forward.html
include<iostream> 5 #include<vector> 6 #include<numeric> 7 using namespace std; 8 9 int main() 10 { 11
前言 在 Windows 中相信大家已经很熟悉使用 Xmanager(Xshell), MobaXterm, SecureCRT 通过 X11 实现 Linux 图形化界面显示,我的需求是在 macOS 下使用 iTerm2 作为 Terminal 实现 X11 图形化界面显示,网上大部分教程只提到安装 Xquartz 但并没有结合实际问题给出完整的解决步骤,我把实践过程做了详细的记录方便大家按照最简单的步骤实现 Linux 图形化显示效果。 X11 介绍 有些 Linux 服务器出于性能和效率的考虑,通常都是没有安装图形化界面的,那么图形化程序在服务器上压根儿就跑不起来,或者无法直接显示出来,这就很尴尬了!那么如何解决这个问题呢? 2. macOS 实现 X11 图形化界面显示 # macOS 安装 xquartz brew cask install xquartz # 启动 xquartz,实测 `Allow connections
当然也有很多人性化调试工具,如rqt系列: 关键词:Python C++ Qt 未开启特定功能的界面如下: 本节以console为例作详细介绍。 基础概念 rqt_console 是一个 图形化用户接口(GUI) 工具,用于查看 ROS 2 中的日志消息。通常,日志消息会显示在终端中。 好像上面第一个图和文字不对应啊……那么往后看…… 现在使用以下命令在新终端中启动turtlesim: ros2 run turtlesim turtlesim_node 先对比: 终端 图形化 2
点击顶部tab的Create进入初始化界面, 点击Create a new project here进入新项目初始化
前言: 在C++11之前,C++98的出现使得C++看起来更像是一门独立的语言,C++委员会成立后,对外宣称的是5年一个版本,但是呢,计划赶不上变化,03年发布了C++03,计划07年发布07版本,变数多了 ,就一直拖啊拖,拖到了C++11,也就是2011年才发布,搁了这么久,C++11也是憋了一个大的,但是挨骂也挨多了,于是呢,后面就想着,有点新东西了就发布新版本,比如之后的C++14 C++17,C++ 20等,目前来说,C++98 C++11 C++20都是大版本,其中20还没有那么大,毕竟是3年更新一次,C++11相对于98来说,更正了许多错误,引入了很多新特性,包含了约140个新特性,600个缺陷修正 ,所以这个大版本需要学习的有很多,目前很多公司都是以11作为基准版本的,学习也是很有必要的。 2.3 nullptr 在C++中,对于NULL定义一直是宏定义为0,这就可能引入部分问题了,因为同时可以表示整型和指针类型,C++11中出于安全考虑加入了nullptr,表示空指针。
前言: 继上文介绍了右值概念,本文介绍两个C++11中的重要概念,lambda表达式和模板的可变参数,这两个部分都不算难,重在理解,有了lambda表达式和模板的可变参数的基础才好理解包装器。 2 模板的可变参数 模板的可变参数,在C++11中可以经常看到的: 就比如emplace的参数,就是模板的可变参数,没错,那三个点也算进去了! 因为模板的可变参数,在C语言里面可以一次性打印多个值(只用一次printf),那么我们想用C++实现怎么办呢? 在printf里面,参数包的底层是一个数组,但是C++里面,参数包我们只能说它是一个集合,所以当我们传了参数进去,但是不能像使用for遍历一个数组一样去遍历这个参数包了。 class Heap { public: static Heap* CreateObj() { return new Heap; } // C++98 私有+只声明不实现 // // C++11
本篇的目的是:梳理一份CentOS/RHEL7+11gR2 RAC部署的较标准文档。 结合了公司内部文档及mos等多方材料,尽可能梳理完整。 Installation walk-through - Oracle Grid/RAC 11.2.0.4 on Oracle Linux 7 (Doc ID 1951613.1) 【安装】CentOS7.7下图形化安装 Oracle11gR2 二、环境规划 以下环境在VMware Workstation 15 Pro 下验证实验 1. chmod 771 /oracle/app --修改grid、oracle用户密码 passwd grid passwd oracle 5.内核参数配置 内核参数的说明参照【安装】CentOS7.7下图形化安装 先备份,再修改,只改节点1 搜索NMECTL这一行 在括号后面加上 -lnnz11 修改保存 ?
c++入门教程–-11递归 递归的意思就是函数自己调用自己。 但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。 例子: 5!
除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”:如下:int *p1 = NULL; // 需要引入cstdlib头文件int 到这里,大家心里有没有疑问:为什么C++11要引入nullptr?它与NULL相比又有什么不同呢?这就是我们今天要解决的问题。 C/C++中的NULL到底是什么我们查看一下C和C++的源码,不难发现:1.NULL在C++中的定义,NULL在C++中被明确定义为整数0:/* Define NULL pointer value */ 那么问题又来了,我们从一开始学习C++的时候就被告诫C++是兼容C的,为什么对于NULLC++却不完全兼容C呢?通过查找维基百科,才发现这其中的原因。 简单地说,C++之所以做出这样的选择,根本原因和C++的函数重载机制有关。