C++是一门与时俱进的语言。 早期的C++关注的主要问题是通用性,却没有太多关注易用性的问题,使得C++成为了一门多范式语言,但是使用门槛较高。
从2011开始,C++的标准进行了较大的更新,开始更多地关注易用性。通常,2011年的C++标准称为C++11,又称为C++0X。目前,C++的标准基本上每三年更新一次,因此有了2014的C++14,以及今年即将发布C++17标准。如果继续是三年发布一个标准,可以预期,在2020会有C++20标准。目前GCC 6.1开始已经默认默认使用 C++14 标准。
现代C++的详细内容请参考维基百科或者http://en.cppreference.com或者MSDN的介绍:欢迎回到 C++(现代 C++)
本篇将举一个简单的例子,通过三个特性,说明现代C++的魅力。如下:
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 int main() 5 { 6 //1.‘Range For‘ And ‘Auto‘ 7 char str[] = "hello"; 8 for(auto ch:str)cout<<ch; 9 cout<<endl; 10 //2.‘using‘ 11 using vecint = vector<int>; 12 vecint ivec; 13 for(auto ele:{1,2,3})ivec.push_back(ele); 14 for(auto ele:ivec)cout<<ele<<endl; 15 //3.generalized lambda 16 auto f = [](auto x,auto y){return x+y;}; 17 auto g = [](auto func,auto z){return func(3,z)+4;}; 18 auto apply = [](auto func,auto ele){return func(ele);}; 19 auto square = [](auto ele){return ele*ele;}; 20 cout<<f(2,3)<<endl; 21 cout<<g(f,5)<<endl; 22 cout<<f(string("hello"),string(" world"))<<endl; 23 cout<<apply(square,8.1)<<endl; 24 }
编译: $ g++ -std=c++14 main.cpp
输出:
$ ./a hello 1 2 3 5 12 hello world 65.61
涉及的三个特性:
1.Range-based for loop (since C++11)
基于范围的for循环在很多语言早就有了,比如Python,Java1.5+。这是一个易用特性。
2.‘using‘关键字用于别名
using增加了新用法,算是老词新意,用于简化过长的类型声明,目前Java依然没有这个特性。
3.Generalized lambda
泛型Lambda,有一点类似C++中模版,在这里比模版简洁。
小结:
这个例子给我的感觉是,如果连auto都可以省略掉的话,这语法基本上就类似Python了。这也说明,C++开始吸收其他语言的优点,成为一门越来越现代化的语言。目前,越来越多的新项目开始使用C++的新特性。为了避免落后,我们有必要重新认识C++。
时间: 2024-11-11 09:19:38