C++11
来源:互联网 发布:手机电影软件哪个最好 编辑:程序博客网 时间:2024/06/15 19:50
1.auto
在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类型的占位符,通知编译器去根据初始化代码推断所声明变量的真实类型。各种作用域内声明变量都可以用到它。例如,名空间中,程序块中,或是for循环的初始化语句中。
auto i = 42; // i is an intauto l = 42LL; // l is an long longauto p = new foo(); // p is a foo
使用auto通常意味着更短的代码(除非你所用类型是int,它会比auto少一个字母)。试想一下当你遍历STL容器时需要声明的那些迭代器(iterator)。现在不需要去声明那些typedef就可以得到简洁的代码了。
std::map<std::string, std::vector<int>> map;for(auto it = begin(map); it != end(map); ++it) {}
2. nullptr
以前都是用0来表示空指针的,但由于0可以被隐式类型转换为整形,这就会存在一些问题。关键字nullptr是std::nullptr_t类型的值,用来指代空指针。nullptr和任何指针类型以及类成员指针类型的空值之间可以发生隐式类型转换,同样也可以隐式转换为bool型(取值为false)。但是不存在到整形的隐式类型转换。
3.基于范围的for循环
为了在遍历容器时支持”foreach”用法,C++11扩展了for语句的语法。用这个新的写法,可以遍历C类型的数组、初始化列表以及任何重载了非成员的begin()和end()函数的类型。如果你只是想对集合或数组的每个元素做一些操作,而不关心下标、迭代器位置或者元素个数,那么这种foreach的for循环将会非常有用
std::map<std::string, std::vector<int>> map;std::vector<int> v;v.push_back(1);v.push_back(2);v.push_back(3);map["one"] = v;for(const auto& kvp : map) { std::cout << kvp.first << std::endl; for(auto v : kvp.second) { std::cout << v << std::endl; }}int arr[] = {1,2,3,4,5};for(int& e : arr) { e = e*e;}
4.override和final
我总觉得 C++中虚函数的设计很差劲,因为时至今日仍然没有一个强制的机制来标识虚函数会在派生类里被改写。vitual关键字是可选的,这使得阅读代码变得很费劲。因为可能需要追溯到继承体系的源头才能确定某个方法是否是虚函数。为了增加可读性,我总是在派生类里也写上virtual关键字,并且也鼓励大家都这么做。
override,表示函数必须重写基类中的虚函数,如果派生类没有重写到将编译报错。(放在子类中)
final,表示派生类不应当重写这个虚函数,如果派生类重写了基类的虚函数将编译报错。(放在基类中)
class A{public: virtual void f(short) { std::cout << "A::f" << std::endl; } virtual void g(int) final { std::cout << "A::g" << std::endl; }};class B : public A{public: virtual void f(short) override { std::cout << "B::f" << std::endl; } //virtual void g(int) { std::cout << "A::g" << std::endl; } // error C3248: “main::A::g”: 声明为“final”的函数无法被“main::B::g”重写 virtual void g(float) { std::cout << "A::g" << std::endl; } // 重载};
Smart Pointers 智能指针
- C(11)
- 11C
- [C/C++][2012-11-29] __attribute__ 详解
- 11-22C/C++/python程序编程
- 11/24 C/C++/Python程序bainchen
- c练习11
- C语言例题11:
- linux0.11 build.c
- c语言练习11
- 【C语言】11-指针
- 11,标准C
- 【C语言】11-指针
- C指针原理(11)
- 介绍了C + + 11
- 【C语言】11-指针
- C-枚举(11)
- 【C语言】11-指针
- 【C语言】11-指针
- hadoop 数据倾斜
- 自定义控件其实很简单3/4
- 大数运算(三)——大数相除求余数和商
- hdu5438 -ponds -水题
- jvm 调优
- C++11
- Android Activity启动慢
- 查看端口被哪个进程占用
- Java中类对象之间的类型转换
- 彩票35选7
- 学习linux内核,都看哪些书?
- Android动画之AnimatorSet如何循环执行
- JS正则表达式验证数字非常全
- IRCtrl(爱雅遥控器)串口接收器自制