C++11新特性(1)
1.long long 类型
C++11新增了long long 和 unsigned long long 类型,为长整型和无符号长整型
long long 类型的数据占用8个字节(64位),取值范围为 -9223372036854775808~9223372036854775807( -2^63 ~ 2^63-1 )
unsigned long long 也占用8个字节,取值范围为0 ~ 18446744073709551615 ( 0 ~ 2^64 - 1 )
在VS2015中,如果定义 long long a = -9223372036854775808 会报错:
错误 C4146 一元负运算符应用于无符号类型,结果仍为无符号类型
因为在头文件 limit.h中定义了 INT_MAX,LONG_MAX,LLONG_MAX,long long a = -9223372036854775808会认为对long long 型数据进行一个一元运算,而LLONG_MAX = 9223372036854775807,所以会溢出,可以直接定义 unsigned long long = LLONG_MIN。
在使用常量时,可以在后面加上LL(或ll,不分大小写)用来表示该数是一个long long类型的数,例
long long a = 100ll
unsigned long long a= 10uLL
在使用printf和scanf进行输入输出long long 型数据时,一般linux评测系统使用%lld (%llu),windows评测系统用%I64d (%I64u)
2.类型别名
定义类型别名由两种方法,一种是传统方法使用关键字typedef,tyedef 定义了一个类型别名,例
typedef long long ll;
ll a,*b;
C++11增加了别名声明来定义类型的别名,using 类型别名 = 类型名。例:
using ll = long long;
ll a = 1;
3.auto关键字
auto关键字在C++98和C语言中,被用作申请具有自动存储周期的变量,在声明该变量时被建立,退出当前程序块时释放,与局部变量相似。auto仅仅是一个占位符,它并不是一个真正的类型,
在C++11中,auto关键字可以用来获取表达式的类型,而不需我们自己指定,识别类型的工作由编译器来做,因此auto变量必须有初始值。
int a = 1, b = 1;
auto c = a + b;
输出c = 3
说明:
- 使用auto在一条语句中申请多个变量时,由于这些变量只能有一种类型,所以这些变量的类型必须保证一致。例:
auto c =1 ,d=1.0; //报错,c为int型,d为double型
int i = 0;
const int ci = i;
auto &n = i, *p2 = &ci; //报错,
- 当auto的对象是一个引用是,则返回的类型是引用对象的类型,引用的语义被去除
int a = 1;
int &b = a;
auto c = b;
a = 2;
cout <<b<<" "<< c << endl;
//结果输出2 1
- 当auto的对象是const类型时,则const被忽略,变为变量。要想变为常量型,需要在前面加上const
const int a = 5;
auto b = a;
b = 100;
const auto c = a;
- 函数或者模板参数不能被声明为auto
int function(auto a){ //报错
****;
}
- 若auto的对象是一个数组,则返回类型一个指针
int a[3] = {1, 2, 3};
auto b = a;
cout << typeid(b).name() << endl;
//输出int *
4.范围for语句
范围for语句的语法形式为
for (declaration : expression)
statement
expresion表示的是一个序列,如数组、vector、string、花括号括起来的初始值列表等(有能够返回迭代器begin和end成员);declaration定义一个变量,expression中的每一个元素都能够变为该变量的类型(建议直接使用auto类型说明符)
若想要改变expression中的值,则需要使用引用类型
string s = "123";
for (auto i : {1 ,2,3})
i = i * 2;
for (auto &i : s)
i = i + 2;
cout << s << endl;
//输出3 4 5
5.nullptr常量
C++11中使用nullptr来表示空指针,nullptr是一种特殊的字面值,可以转换为任意的指针类型。
除了使用nullptr,还可以使用其他方法在C++中生成空指针
int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL;
其中NULL是一个宏定义,,c中NULL为(void*)0,而c++中NULL为整数0,将指针值为0,即为空指针。void*不能转化为任意类型的指针
还要注意,不能把int变量赋给指针,即使这个int变量值为0
int zero =0;
pi = zero; //报错
C++11新特性(1)的更多相关文章
- C++ 11学习和掌握 ——《深入理解C++ 11:C++11新特性解析和应用》读书笔记(一)
因为偶然的机会,在图书馆看到<深入理解C++ 11:C++11新特性解析和应用>这本书,大致扫下,受益匪浅,就果断借出来,对于其中的部分内容进行详读并亲自编程测试相关代码,也就有了整理写出 ...
- C++11新特性总结 (二)
1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...
- C++11新特性总结 (一)
1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己写了,看别人写的代码估计都会有些吃力.C++ Primer5是学习C++1 ...
- C++ 11 新特性
C++11新特性: 1.auto 2.nullptr 3.for 4.lambda表达式 5.override ...
- [转载] C++11新特性
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...
- 在C++98基础上学习C++11新特性
自己一直用的是C++98规范来编程,对于C++11只闻其名却没用过其特性.近期因为工作的需要,需要掌握C++11的一些特性,所以查阅了一些C++11资料.因为自己有C++98的基础,所以从C++98过 ...
- C++11新特性——range for
很多编程语言都有range for语法功能,自C++11起,终于将这个重要功能加入C++标准中.range for语句,可以方便的遍历给定序列中的每个元素并对其执行某种操作. 1.基本语法 for(d ...
- C++11新特性——大括号初始化
C++11之前,C++主要有以下几种初始化方式: //小括号初始化 string str("hello"); //等号初始化 string str="hello" ...
- C++11新特性之六——元编程
C++11新特性之六——元编程
- C++11新特性之一——Lambda表达式
C++11新特性总结可以参考:http://www.cnblogs.com/pzhfei/archive/2013/03/02/CPP_new_feature.html#section_6.8 C++ ...
随机推荐
- js05-DOM对象二
一.节点操作 创建节点:var ele_a = document.createElement('a');添加节点:ele_parent.appendChild(ele_img);删除节点:ele_pa ...
- DAO 四个包的建立
一.DAO 四个包的建立,降低代码之间的耦合性? 之前写代码,都是在一个包下.代码耦合性较高,不利于后期的维护. dao(代码分层?) 有利于后期的维护代码,修改方便. com.aaa.dao 存放d ...
- LODOP设置超文本不自动分页的方法
在LODOP中,超文本超过打印项高度会自动分页,自动分页有两种情况:超过设置的打印项高度,超过纸张.这里是指高度,超过纸张宽度的超文本不会显示,会隐藏掉. 如果你不了解什么是LODOP中的超文本打印项 ...
- LODOP不同打印机出现偏移问题
方法简单描述:1.精确套打,设置以纸张边缘为基点,可避免不同可打区域不同带了的影响.2.不同客户端打印机位置差异,可通过打印维护调整,结果在客户端本地.或调整打印机初始位置(本人使用的金税盘的开票软件 ...
- Wannafly Union#1
题目链接:http://vjudge.net/contest/142053#overview A.题意:有一个3*n的隧道,人和车轮流走,人先向右走一步,然后选在是在原地不动还是上下移动一格,之后车开 ...
- 【并发编程】【JDK源码】J.U.C--AQS 及其同步组件(2/2)
原文:慕课网高并发实战(七)- J.U.C之AQS 在[并发编程][JDK源码]AQS (AbstractQueuedSynchronizer)(1/2)中简要介绍了AQS的概念和基本原理,下面继续对 ...
- 【并发编程】【JDK源码】J.U.C--线程池
原文:慕课网实战·高并发探索(十四):线程池 Executor new Thread的弊端 每次new Thread 新建对象,性能差. 线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多 ...
- Java多线程编程-线程之间的通信
转载自:这里 学习了基础的线程知识 看到了 线程之间的通信 线程之间有哪些通信方式呢? 1.同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. public ...
- jdbc批处理进行多条数据插入
package cn.linjun.demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.S ...
- host-only局域网络
在网桥配置的情况下设置: 网桥配置链接 配置前: 配置后: vi /etc/sysconfig/network-scripts/ifcfg-eth0 这里是使用static静态配置,具体网络配置及声明 ...