C++11奇怪的语法
1. istream_iterator
简而言之,istream_iterator像操作容器一样操作istream。例如下面代码,从std::cin构造std::istream_iteream<int>类型迭代器,可以用于从cin顺序读取int数值。该迭代器又被用于初始化int型vector。
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
int main()
{
std::istream_iterator<int> in_iter(std::cin);
std::istream_iterator<int> eof; std::vector<int> vec(in_iter, eof); for_each(vec.cbegin(),
vec.cend(),
[] (const int i) {
std::cout << i << std::endl;
}); return ;
}
编译并运行这个例子:
$ g++ --std=c++ -Wall -o test test.cpp
$ ./test ^D
2. 元素个数为0的数组
// mingw32 G++4.9.2 with --std=c++11
#include <iostream>
int main()
{
int q[]; // std::cout << q[0] << std::endl;
for (auto b: q) {
std::cout << b << std::endl;
}
return ;
}
在C++11中,不能通过std::begin(q), std::end(q)获得元素为0数组的iterator:
#include <iostream> int main()
{
int p[]; auto b = std::begin(p); // error
return ;
}
3. new[0]
C++的new语法用来在运行时动态申请内存,
char *p = new char;
而new[]语法则用来动态申请一片连续的内存区域:
int n = ;
char *pa = new char[n];
上例中,当n等于0时,会发生什么呢?
#include <iostream>
int main()
{
int n = ;
int *p = new int[n]; // std::cout << *p << std::endl; // undefined for (int *q = p; q != p + n; ++q) {
std::cout << q << std::endl;
}
return ;
}
上例是完全可以执行的,也就是p = new [0]返回了一个合法的指针,该指针可以向其他指针一样做比较,但却不可以解引用,如上例中注释掉那一行,毕竟数组是空的。
4. 没有返回类型的Conversion Operator
Converion Operator是一种特殊的类成员函数,其语法如下:
operator type() {}
其中type是转换的目标类型。
虽然没有返回类型,函数体中又必须返回type类型value:
#include <iostream> class SmallInt {
public:
SmallInt(int i) : _i(i){}
operator int() {return _i;} // Convertion Operator
private:
int _i;
}; int main()
{
SmallInt si();
int ret = si + ;
std::cout << ret << std::endl;
return ;
}
5. Reference Collapsing Rule
通过typedef等语法创建引用的引用,适用引用折叠原则:
T & & =>T&
T&& & => T&
T& && => T&
T&& && => T&&
也就是,除去右值引用的右值引用一种情况,全部折叠成普通引用;而右值引用的右值引用则折叠成右值引用
C++11奇怪的语法的更多相关文章
- [转]Markdown 11种基本语法
Markdown 11种基本语法 现在是我在学习Markdown时做的笔记.学完这些Markdown的基本使用已经不成问题. 1. 标题设置(让字体变大,和word的标题意思一样) 在Markdown ...
- Markdown 11 种基础语法
现在是我在学习Markdown时做的笔记.学完这些Markdown的基本使用已经不成问题. 1. 标题设置(让字体变大,和word的标题意思一样)在Markdown当中设置标题,有两种方式: 第一种: ...
- Markdown 11种基本语法
markdown真的很方便! 我根据自己在github上维护的项目编写的readme文件总结一些最基本的使用方法 ,学完这些Markdown的基本使用已经不成问题. 1. 标题设置(让字体变大,和wo ...
- -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义
Java语言基础组成 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 关键字 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class ...
- Markdown 11种基本语法【转】
[转自:http://www.cnblogs.com/hnrainll/p/3514637.html] 1. 标题设置(让字体变大,和word的标题意思一样)在Markdown当中设置标题,有两种方式 ...
- 11 - Vue模板语法
Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. 所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML ...
- systemverilog中奇怪的语法
1.->运算符 expression_a->expression_b其实等效于(!expression_a || expression_b),systemverilog中利用 || 运算的 ...
- C++11模板友元语法
第 1 类: 普通类A的 普通类B 友元(一对一友好关系): 无需前置声明class B,当class B第一次出现在friend声明中时,该名字被隐式地认为可见. class A { friend ...
- 【作业】 iterator,set_union 一些奇怪的语法
关于set_union系列函数(需要有序)的第五个参数,output iterator. 网上都是用inserter(c,c.begin()) 但vs会编译报错 所以改成了back_inserter, ...
随机推荐
- AI病毒来袭,拿什么拯救你我的电脑?
文|雷宇 来源|智能相对论(aixdlun) 在刘慈欣的科幻小说<中国2185>中,除领土,领海,领空外,还有一个被称为电子领土的地方,这个地方除了容易受常规武器破坏外,还容易受到软件武器 ...
- arcgis api for silverlight开发系列之二:缓存图层与动态图层及图层总结 .
本文摘自:http://blog.csdn.net/leesmn/article/details/6916458(很优秀的博客) 作为ESRI的平台的一份子arcgis api for silve ...
- Android之修改用户头像并上传服务器(实现手机拍照和SD卡选择上传)
写了这么多个的APP,最近才把他这个功能写上来,就抽取其中的用户修改头像的相关操作这个功能写了这篇博客,来与大家分享,希望对你有所帮助. 案例包含了: Xutil图片上传 拍照和SD卡选择图片 图片缓 ...
- 一个n*n 的方格,要从左上角走到右下角,一次只能往右或往下走一步,求算法得出所有走动的方法数。
题目一:一个n*n 的方格,要从左上角走到右下角,一次只能往右或往下走一步,求算法得出所有走动的方法数. 分析:对于第(i,j)个格子,只有向右走一步到达或者向左走一步到达,dp(i,j) = d(i ...
- day40 数据结构-算法(二)
什么是数据结构? 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都是一种数据结构. N.Wirth: “程序=数据结构+算法” 列表 列表:在其他编程语言中称 ...
- 64位Ubuntu系统安装OpenCV 2.4.x+ffmpeg 完美解决方案
http://www.bfcat.com/index.php/2012/09/64bits-ubuntu-opencv-2-4-x-ffmpeg/
- java应用简单递归
毕业后就怎么学过算法,还在上学的时候学过数据结构,现在基本上都还给老师了,可惜老师学费没有还给我... 情景: 类似于给定一个数字,算他由多少个数字组成,比如:36 现在有10.5.1 ,那么最佳帅3 ...
- 【Keras学习】Sequential模型
序贯(Sequential)模型 序贯模型是多个网络层的线性堆叠,也就是“一条路走到黑”. 可以通过向Sequential模型传递一个layer的list来构造该模型: from keras.mode ...
- Winform工具栏ToolStrip和状态栏StatusStrip
工具栏和状态栏的设置与前面的菜单基本相似 1.ToolStrip 从工具栏选项卡上拖一个放入窗体即可,位置也是通过其Dock设置的.先上一张图,红色部分就是工具栏,工具栏中可以放置如图下拉菜单中的Bu ...
- java日常知识点积累
java类型中的普通非static方法 示例代码: package com.lvzhi; /** * Created by lvzhi on 2017/9/3 */ public class MyTh ...