C++11增加了许多的特性,auto就是一个很明显的例子。  还有就是typedid()获取数据变量的类型

看下面简短的代码:

atuo: 很像java中的加强for循环....。

 //获取一个数据变量的类型
#include<iostream>
#include<stdlib.h> int main() { double db = 10.9;
double *ps = &db;
auto var =*ps;
std::cout<<typeid(var).name()<< std::endl;
getchar();
return ;
}

关于C++关于款字符的使用:

 //关于宽字符的使用
#include<iostream> #include<stdlib.h>
#include<locale> int main(int argv ,char args []) { setlocale(LC_ALL, "chs"); //这就是设定为本地,中文简体
wchar_t * p2 = L"1234frd";
std::wcout << p2 << std::endl;
wchar_t *pi = L"北京adas,你好!";
std::wcout << pi <<std::endl; getchar();
return ;
}

关于数组类型的使用:

 //新数组的使用
#include<iostream>
#include<array>
#include<stdlib.h> int main(int argv ,char args []) { //array数据类型 std::array<double ,>data={,,,,};
for (auto var : data) {
std::cout << "var =" << var << std::endl;
}
getchar();
return ;
}

对于这里,我们需要知道的是,array的建立实在栈的基础上,所以最大尺寸不要大于1M ,不然会出现栈溢出。

而对于vector而言,是建立在堆上的,所以没有溢出的说法。

4, C++新特性,lambda表达式(匿名函数)

 //新数组的使用
#include<iostream>
#include<vector>
#include<algorithm>
#include<stdlib.h> int main(int argv ,char args []) { std::vector<int> myvec;
myvec.push_back();
myvec.push_back();
myvec.push_back();
myvec.push_back();
myvec.push_back();
int res = ;
//lambda 表达式 求和
//&res直接操作一个变量,res等价于返回值,x代表参数
//每次充当迭代器指向的元素,大括号就是代码
std::for_each(myvec.begin(), myvec.end(), [&res](int x) {res += x; });
std::cout << res << std::endl;
std::cin.get();
return ;
}

上面的实例,做的就是一个一个从1~5的累加过程。采用迭代器实现lambda函数。

5. 函数包装器管理内嵌函数:

对于这一个C++高级语法的作用:

第一:  可以用作设计执行接口,接口设计关卡,也可以用来计数。

第二: 可以内嵌到另一个函数,实现函数的内嵌。游戏开发中,经常使用到这种方法。

/* 函数包装器管理内嵌函数 */
/*
以一个简单的四则运算为例子
*/
//#pragma warning(disable: 2064)
#include<stdio.h>
#include<iostream>
#include<functional> template <typename T ,typename F>
T run(T a , T b , F f) { return f(a , b);
} int main(int argc , char * args []){ using std::function;
double db = 12.9; //double *
//加 减 乘 除
function<double(double,double)> Add = [](double a , double b) {
return a+b;
};
function<double(double, double)> Sub = [](double a, double b) {
return a - b;
};
function<double(double, double)> Mul = [](double a, double b) {
return a*b;
};
function<double(double, double)>Div = [](double a, double b) {
return a / b;
};
//定义一个函数数组
function<double(double, double)>p[]= { Add,Sub,Mul,Div };
char str[] = "+-*/";
int i = ;
for(auto fun : p )
std::cout <<"12 "<<str[i++]<<" 13 ="<< run<double>(,,fun) <<std::endl;
std::cin.get();
return ;
}

运行结果如图:

当然对于函数包装器而言,还是可以调用外部函数的。不然怎么彰显它的高级二字。

代码:

 /* 函数包装器管理内嵌函数 */
/*
以一个简单的四则运算为例子
*/
//#pragma warning(disable: 2064)
#include<stdio.h>
#include<iostream>
#include<array>
#include<functional> template <typename T ,typename F>
T run(T a , T b , F f) { return f(a , b);
}
double show(double a, double b) { std::cout << "这是一个外部函数,被调用" << std::endl;
return (a+b);
}
int main(int argc , char * args []){ using std::function;
double db = 12.9; //double *
//加 减 乘 除
function<double(double,double)> Add = [](double a , double b) {
return a+b;
};
function<double(double, double)> Sub = [](double a, double b) {
return a - b;
};
function<double(double, double)> Mul = [](double a, double b) {
return a*b;
};
function<double(double, double)>Div = [](double a, double b) {
return a / b;
};
//定义一个函数数组
function<double(double, double)>p[]= { Add,Sub,Mul,Div ,show};
char str[] = "+-*/+";
int i = ;
for(auto fun : p )
std::cout <<"12 "<<str[i++]<<" 13 ="<< run<double>(,,fun) <<std::endl;
std::cin.get();
return ;
}

C++ 高级语法学习与总结(代码实例)的更多相关文章

  1. Swift高级语法学习总结(转)

    Swift高级语法学习总结 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参 ...

  2. Swift高级语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如 ...

  3. javascript高级语法学习

    可维护的代码意味着: 可读的 一致的 可预测的 看上去就像是同一个人写的 已记录 命名函数表达式 (function fn(){}) 他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含 ...

  4. 大数据之scala高级语法学习

    协变 案例一: class Animal {} class Bird extends Animal {} class Animal {} class Bird extends Animal {} // ...

  5. Swift基础语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...

  6. 深度学习之卷积神经网络CNN及tensorflow代码实例

    深度学习之卷积神经网络CNN及tensorflow代码实例 什么是卷积? 卷积的定义 从数学上讲,卷积就是一种运算,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分.级数,所以看起来觉得很复杂 ...

  7. PHP高级特性-反射Reflection以及Factory工厂设计模式的结合使用[代码实例]

    PHP高级特性-反射以及工厂设计模式的结合使用 [结合 Laravel-Admin 代码实例讲解] 利用反射来实现工厂模式的生产而无需创建特定的工厂类 本文地址http://janrs.com/?p= ...

  8. iOS开发——语法篇OC篇&高级语法精讲二

    Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ...

  9. javascript高级实战学习

    学习目标: - 理解面向对象开发思想 - 掌握 JavaScript 面向对象开发相关模式 - 掌握在 JavaScript 中使用正则表达式 - typora-copy-images-to medi ...

随机推荐

  1. Android 通过 Wifi 调试 Debug (Android Studio)

    参考资料: http://www.cnblogs.com/sunzhenxing19860608/archive/2011/07/14/2106492.html 前提: Android 手机 和 PC ...

  2. [推荐] WordPress主题使用Google Fonts字体访问不了的解决办法

    外国人做的WordPress主题喜欢带上Google的字体,但到了咱天朝是没法访问fonts.googleapis.com的 现有数字公司出的公共资源库可以替换,把fonts.googleapis.c ...

  3. leetcode 257

    查找二叉树中根节点到叶子节点的所有路径: 本题有两种解法:递归解法和非递归解法,递归解法请参考:http://blog.csdn.net/booirror/article/details/477331 ...

  4. Struts2(一):怎么创建对应版本的struts.xml

    1.eclisep导航菜单:windows->preferences->Xml->Xml Catalog; 2.在Xml Catalog右侧,添加一个新的XML Catalog: 3 ...

  5. 提高网站性能的 5 个 Grunt任务//////////////////z

    提高网站性能的 5 个 Grunt任务 时间 2015-03-06 09:13:02  极客头条 原文  http://hugnew.com/wordpress/提高网站性能的-5-个-grunt任务 ...

  6. Oracle中的自动增长字段

    Oracle中的自动增长字段 Oracle 中不像MYSQL 和MSSQLServer 中那样指定一个列为自动增长列的方式,不过在Oracle中可以通过SEQUENCE序列来实现自动增长字段. 在Or ...

  7. Win10系统Start Menu上的图标莫名消失

    今天在工作过程中,突然有测试的同事给我报来一个问题.她是这么描述的“执行完XXX工具之后,在Start Menu找不到图标了.” 针对问题本身: 1,是执行完XXXX工具之后? 2,Start Men ...

  8. mac攻略(三) -- apache站点配置

    Mac OS X 中默认有两个目录可以直接运行你的 Web 程序, 一个是系统级的 Web 根目录:/Library/WebServer/Documents/ 此根目录我们平常使用地址http://l ...

  9. ArcGIS Javascript查询数据库并添加到地图上

    将数据存放到数据库中,动态的调取比较灵活,数据变动后不需要改变图层的属性表. 此处采用的方法是通过jquery查询数据库,并将数据库的结果生产json串返回给js,在js中动态解析json串增加点至地 ...

  10. Hibernate <二级缓存>

    二级缓存: 定义: 1.二级缓存被称为进程级缓存或者sessionFactory级缓存,二级缓存可以被所有session共享 2.二级缓存的生命周期和sessionFactory生命周期一样(sess ...