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奇怪的语法的更多相关文章

  1. [转]Markdown 11种基本语法

    Markdown 11种基本语法 现在是我在学习Markdown时做的笔记.学完这些Markdown的基本使用已经不成问题. 1. 标题设置(让字体变大,和word的标题意思一样) 在Markdown ...

  2. Markdown 11 种基础语法

    现在是我在学习Markdown时做的笔记.学完这些Markdown的基本使用已经不成问题. 1. 标题设置(让字体变大,和word的标题意思一样)在Markdown当中设置标题,有两种方式: 第一种: ...

  3. Markdown 11种基本语法

    markdown真的很方便! 我根据自己在github上维护的项目编写的readme文件总结一些最基本的使用方法 ,学完这些Markdown的基本使用已经不成问题. 1. 标题设置(让字体变大,和wo ...

  4. -1-1 java 基础语法 java关键字 java 注释 常量 语句 运算符 函数 数组定义

    Java语言基础组成 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 关键字 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 用于定义数据类型的关键字 class ...

  5. Markdown 11种基本语法【转】

    [转自:http://www.cnblogs.com/hnrainll/p/3514637.html] 1. 标题设置(让字体变大,和word的标题意思一样)在Markdown当中设置标题,有两种方式 ...

  6. 11 - Vue模板语法

    Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据. 所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML ...

  7. systemverilog中奇怪的语法

    1.->运算符 expression_a->expression_b其实等效于(!expression_a || expression_b),systemverilog中利用 || 运算的 ...

  8. C++11模板友元语法

    第 1 类: 普通类A的 普通类B 友元(一对一友好关系): 无需前置声明class B,当class B第一次出现在friend声明中时,该名字被隐式地认为可见. class A { friend ...

  9. 【作业】 iterator,set_union 一些奇怪的语法

    关于set_union系列函数(需要有序)的第五个参数,output iterator. 网上都是用inserter(c,c.begin()) 但vs会编译报错 所以改成了back_inserter, ...

随机推荐

  1. 《F4+2 团队项目需求分析改进》

    a.分析<动态的太阳系模型项目需求规格说明书>初稿的不足. 任务概述描述的有些不具体,功能的规定不详细,在此次作业进行了修改. b.参考<构建之法>8.5节功能的定位和优先级, ...

  2. 【源码学习之spark core 1.6.1 各种部署模式所使用的的TaskSceduler及SchedulerBackend】

    说明:个人原创,转载请说明出处 http://www.cnblogs.com/piaolingzxh/p/5656879.html 未完待续 未完待续

  3. ES5和ES6中的继承

    看到一篇写的非常好的关于js继承的文章,其中对构造函数.原型.实例之间的关系的描述十分透彻,故转载作者文章以随时学习,并供大家共同进步! ES5 ES5中的继承,看图: function Super( ...

  4. 002——数组(二)each() list() implode() explode() in_array()

    <?php /** * 数组(二)each() list() implode() explode() in_array() */ /*implode() 把数组拆分成字符串 * explode( ...

  5. SublimeText实用快捷键

    Markdown Ctrl+Alt+O: Preview Markup in Browser Ctrl+Alt+X: Export Markup as HTML Ctrl+Alt+C: Copy Ma ...

  6. gson-2.2.api简单

    使用gson的tojson和fromjson实现对象和json的转换 Gson gson = new Gson(); // Or use new GsonBuilder().create();     ...

  7. Android Studio 编译报错:Process 'command 'D:\SDK\AS\sdk\build-tools\23.0.0\aapt.exe'' finished with non-zero exit value 1

    AGPBI: {"kind":"error","text":"No resource identifier found for a ...

  8. redux-thunk中间件源码

    浅析redux-thunk中间件源码 大多redux的初学者都会使用redux-thunk中间件来处理异步请求,其理解简单使用方便(具体使用可参考官方文档).我自己其实也一直在用,最近偶然发现其源码只 ...

  9. Swift 图片浏览器

    class ViewController: UIViewController, UIScrollViewDelegate{ var scrollView: UIScrollView? var imag ...

  10. UOJ22. 【UR #1】外星人【DP】【思维】

    LINK 题目大意 给你一个序列和一个值x 问你用某种方式对序列安排顺序之后一次对x取mod膜的最大值和方案数 首先发现一个性质 一个数之后所有比它大的数都没有贡献 考虑怎么利用这个性质? 就可以从小 ...