c++学习笔记(部分语法及c++11新特性)

前言

c++的语法细节实在过杂,再加上c++11的新特性,看了又忘,忘了再看,故讲学习过程所得以笔记形式记录于此。

1. c++对变量初始化的形式

int a = 0; int a = {0}; int a(0); int a{0};//叫做列表初始化 c++11时,才得以全面应用

long double b = 1.02; int a(b); int a=b; //正确:转换执行,但丢失了部分值

int a{b}; int a={b};//错误:转换未执行,因为存在丢失信息的危险

2. 变量声明和定义的关系

extern int x; //为声明 int x; //为定义

任何包含了显示初始化的声明即为定义 如:extern int a=8; //给a赋初始值抵消了extern的作用

在函数体内部初始化extern标记的变量 将引发错误

3.常量

const限定符

const a=2; //在预处理时,编译器会讲所有的a全部用2来替换 (和宏定义类似)

默认状态下,const对象仅在文件内有效。当多个文件中出现了同名的const变量时,其实等同于在多个文件同时定义变量

若想一次定义多次声明式的在多个文件使用,必须在定义和声明时都使用 extern来限定

const的引用

const int i=2;

const int &r=i;//正确

&r=i+1; // 错误

既然常量值不允许改变,当然也不能通过引用改变 所以引用也必须为const 类型

顶层const和底层const const int a= 10;//顶层const

int b=10;

int *const p=b;//底层const

简单的说 用const 直接 修饰的变量对象等都是顶层const 而 指向const变量或对象的指针和引用 都是底层const

特殊:const int a=10; const int *const p=a; 此时p既是顶层const又是底层const

4.常量表达式

指值不会改变且在编译过程中就能得到计算结果的表达式

int a=1;//不是 const int b=2;//是

const int c=b+2;//是 const int d=a+b;//不是

5.auto类型说明符

如果在声明时不知道变量初始化的值和类型 可以用

auto int a=5,b=4;

auto c = a+b;

编译器会通过a+b的值来推算变量的类型 所以auto定义的变量必须有初始值

6.decltype类型指示符

如果希望从表达式来得到变量类型,但是并不像用变量的值来进行初始化,可以用decltype类型提示符

用法 decltype(x) sum = 11;

x 可以是函数 f() 可以是变量 可以是表达式 特别的 x可以是引用 引用从来都是做为其所指对象的别名出现

只有在此处是个意外 若 int a; decltype((a)) b; 则b是引用类型

因为变量a是可以作为赋值语句左值的特殊表达式 所以(a)的类型便是引用

7.类型别名

typedef typedef a b 将b作为a的别名

using x=y;将x作为y的别名

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 10:58:26

c++学习笔记(部分语法及c++11新特性)的相关文章

Cocos2d-x 3.1.1 学习日志6--30分钟了解C++11新特性

新的关键字 auto C++11中引入auto第一种作用是为了自动类型推导 auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型.通过auto的自动类型推导,可以大大简化我们的编程工作.auto实际上实在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响.另外,似乎auto并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配.如果没有auto关键字 写个迭代器要写很长长,这也算是节省了我们的脑细胞吧,~~~~(>_<)~~~~ !! auto a; /

ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录

放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 诸君,我喜欢嫩的--呸呸呸 诸君,我喜欢3D咋了?新事物会替代旧事物不是~ ArcGIS API for JavaScript 4.2概述 AJS 4.2,即ArcGIS API for JavaScript 4.2,是美国ESRI公司针对WebGIS市场推出的.利用JavaScript和Dojo开发的一款产品,它在2016年12月发布.而AJS 4.0 beta则在一年前就发布了. 关于AJS3和AJS4选择的问题,

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

javascript学习笔记---ECMAScript语法(辅助)

1.区分大小写. test与Test变量是两个不同的变量 2.变量是弱变量. 与C,java等等语言变量不是很一样. 如下java代码 ? 1 2 3 4 int i =0; //再次赋值 i = 10;//ok i = "hello";//wrong 类型不匹配 javascript ? 1 2 3 4 var i = 9; //再次赋值 i = 10;//ok i = "hello";//ok 但是不建议这么干,如此会给开发造成干扰,不明确变量的类型.(变量命名

javascript学习笔记---ECMAScript语法(变量)

变量声明关键字var: var i = 1: var t = "asd"; var test1 = "hi", test2 = "hello"; 声明变量不一定要初始化, var i;//ok 另一方面在使用变量前若未加关键字var,则此变量为全局变量(此特性需特别记住). 变量名字: 变量名需要遵守两条简单的规则: 第一个字符必须是字母.下划线(_)或美元符号($) 余下的字符可以是下划线.美元符号或任何字母或数字字符 命名变量规则: Came

现代C++学习笔记之一资料篇(C++ 11)

最近看网上一些开源的源代码,发现尽多不认识的符号,好吧.开始学习新的C++. C++经典书籍 C++ Primer,第五版开始有了对C++ 11的讲解 C++ Primer Plus,第六版有对C++ 11的讲解,笔者没看过这本,据说比上面那本更基础 The C++ Standard Library A Tutorial and Reference (2nd Edition),将C++标准库的经典 The.C++.Programming.Language.4th.Edition, C++之父的作

0801-----C++Primer听课笔记----------C++11新特性 function 和 bind 的简单使用

1.function 和 函数指针 1.1 function有函数指针的功能,但是使用起来明显比函数指针更加灵活和方便. 1.2 函数指针和function的用法实例. 1.2.1 函数指针首先要清楚函数指针的类型,如void (*)(int, char)等,然后声明一函数指针变量直接调用即可. #include <iostream> using namespace std; /* * 函数指针的用法 */ void test(int i,double j){ cout << i

《Javascript权威指南》学习笔记之十九--HTML5 DOM新标准---处理文档元信息和管理交互能力

一.了解DOM 1.DOM是Document Object Model的缩写,即文档对象类型,是文档在内存中的表示形式,是一个应用程序接口,定义了文档的逻辑结构以及一套访问和处理文档的方法. 2.HTML DOM与Core DOM的区别:前者提供了大量的方法和属性,与现有的程序模型一致,更便于脚本的编写者控制. 二.document对象 使用window.document属性返回一个document对象,代表当前window内加载的文档.window可以省略.winName.document返回

C++ 11新特性解析——《深入理解C++ 11:C++11新特性解析和应用》读书笔记

因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出这篇读书笔记的基础.C++作为踏入编程的最初语言,一直充满感情,而C++11作为新标准虽然推出一段时间了,却因为总总原因直到现在才去开始真正了解,不过一句话回荡在脑中:当你认为为时已晚的时候,恰恰是最早的时候!从C++98到C++11, C++11标准经历了10几年的沉淀,以全新的姿态迎接新的挑战,长话短说,