当前位置: 首页 > news >正文

网站怎么做展现量网站集约化建设会议

网站怎么做展现量,网站集约化建设会议,wordpress同步,网站建设优化服务策划C中的可调⽤对象总结 普通函数类成员函数类静态成员函数与类成员函数的区别 仿函数简单示例高级用法-状态保持优缺点优点缺点 函数指针获取函数地址声明并调用函数指针 lambda表达式语法定义捕获单个捕获符 std::function()协程 可调用对象用处⼴泛#xff1a; ⽐如在使⽤⼀些… C中的可调⽤对象总结 普通函数类成员函数类静态成员函数与类成员函数的区别 仿函数简单示例高级用法-状态保持优缺点优点缺点 函数指针获取函数地址声明并调用函数指针 lambda表达式语法定义捕获单个捕获符 std::function()协程 可调用对象用处⼴泛 ⽐如在使⽤⼀些基于范围的模板函数时如 sort(It first, It last, Compare cmp)、all_of()、find_if() 等需要传⼊⼀个可调⽤对象客制化处理。在处理⼀些回调函数、触发函数时也会使⽤可调⽤对象。 满足以下条件的为可调用对象 是一个函数或类成员函数是一个函数指针是一个重载operator()的类对象lambda表达式是一个可转型为函数指针的类对象是一个类成员函数指针bind表达式、std::function()协程 普通函数 int add(int a, int b) {return a b; } int main() {int num1, num2;std::cout Enter two numbers: ;std::cin num1 num2;int sum add(num1, num2);std::cout The sum of num1 and num2 is: sum s \n;return 0; }类成员函数 #include iostream using namespace std; class Box{ public:double length; // ⻓度double breadth; // 宽度double height; // ⾼度// 成员函数声明double getVolume(void);void setLength( double len );void setBreadth( double bre );void setHeight( double hei ); }; // 成员函数定义 double Box::getVolume(void) {return length * breadth * height; } void Box::setLength( double len ) {length len; } void Box::setBreadth( double bre ) {breadth bre; } void Box::setHeight( double hei ) {height hei; } int main( ) {Box box; // 声明 box类型为 Boxdouble volume 0.0; // ⽤于存储体积// 详述box.setLength(6.0);box.setBreadth(7.0);box.setHeight(5.0);// 体积volume box.getVolume();cout box 的体积 volume endl;return 0; }类静态成员函数 类中的静态成员函数作⽤在整个类的内部类静态成员函数属于类而非对象。静态成员函数只能访问对应类内部的静态数据成员因为静态成员函数没有this指针。类的static函数在类内声明、类外定义时类内使用static修饰类外则不能加static关键字否则会出现编译错误。 class Box{ private:int _non_static;static int _static; public:int a(){return _non_static;}static int b(){//_non_static0; 错误//静态成员函数不能访问⾮静态成员变量return _static;}static int f(){//a(); 不对静态成员函数不能访问⾮静态成员函数return b();} };int Box::_static 0;// static静态成员变量可以在类的外部修改int main(){Box box;Box* pointerbox;box.a();pointer-a();Box::b(); // 类名::静态成员函数名return 0; }与类成员函数的区别 静态成员函数没有 this 指针只能访问静态成员包括静态成员变量和静态成员函数。普通成员函数有 this 指针可以访问类中的任意成员⽽静态成员函数没有 this 指针。 仿函数 仿函数就是重载了()运算符的类对象函数功能通过重载()实现。⾏为类似函数故称仿函数。实际上就是创建⼀个类该类重载了()运算符使得类的实例可以像函数⼀样被调⽤。这允许你在函数对象内部保存状态并在调⽤时执⾏操作。 简单示例 class Foo {void operator()(){cout __FUNCTION__ endl;} }; int main() {Foo a;//定义对象调⽤a.operator()();//直接通过对象调⽤a();//通过临时对象调⽤Foo()(); }高级用法-状态保持 仿函数可以具有成员变量因此在多次调用之间可以保持状态。这在算法需要记录或更新某些值的情况下非常有用。 考虑一个例子对一个vector统计长度小于5的string的个数 优缺点 优点 状态保持仿函数可以具有成员变量因此在多次调用之间可以保持状态。更灵活的接口设计仿函数可以根据需要定制接口以适应特定的算法或场景。例如可以根据算法需要添加额外的成员函数或数据成员。更好的封装仿函数可以将数据和操作封装在一个单独的对象中这有助于实现更清晰、更模块化的代码。 缺点 需要单独实现一个类 函数指针 与数据项相似函数也有地址。函数的地址就是存储它的机器语⾔代码内存的开始地址。通常情况下这些地址对⽤⼾⽽⾔并不重要但对于程序⽽⾔却很有⽤。⽐⽅说可以编写将另⼀个函数的地址作为参数的函数这样第⼀个函数就能够找到第⼆个函数并运⾏它。与直接调⽤另⼀个函数相⽐这种⽅法虽然很笨拙但是它允许在不同的时间传递不同函数的地址这也就意味着可以在不同的时间使⽤不同的函数。 获取函数地址 函数名不加() 声明并调用函数指针 使用using而非old style声明函数指针 注意两种方式绑定函数的区别 使用 using 声明函数指针 #includeiostreamint add(int a, int b) {return a b; }int main() {// 使用 using 声明函数指针类型using AddFunctionPtr int (*)(int, int);// 创建函数指针变量并指向 add 函数AddFunctionPtr my_add_function add;// 使用函数指针调用 add 函数int result my_add_function(3, 4);return 0; }old style #includeiostreamint add(int a, int b) {return a b; }int main() {// 使用 old style 声明函数指针int (*my_add_function )(int, int);// 指向 add 函数my_add_function add;// 使用函数指针调用 add 函数int result my_add_function(3, 4);// int result (*my_add_function)(3, 4); // okreturn 0; }lambda表达式 Lambda表达式是Modern C的⼀个语法糖 。 Lambda表达式用于构造闭包能够捕获作用域中的变量的无名函数对象。 语法定义 没有显式模板形参的 lambda 表达式可以不泛型 [捕获列表] [前属性] [形参列表] [说明符] [异常] [后属性] [返回类型] [约束] [函数体] [capture list] front-attr(opt) (params) specs(opt) exception(opt) back-attr(opt) railing-type(opt) requires(opt) {body}有显式模板形参的 lambda 表达式必然泛型(C20起) 捕获 捕获 是一个含有0个捕获符 的逗号分隔列表可以默认捕获符 开始。捕获列表定义了可以从 lambda 函数体之内访问的外部变量。默认捕获符只有(按引用) 和 (按复制)它们都将隐式捕获被使用的自动存储期变量(函数能看到的任一变量)。 注意以默认捕获符隐式捕获的当前对象*this将始终按引用捕获即使默认捕获符是 。 单个捕获符 简单的按复制捕获作为包展开的简单的按复制捕获带初始化器的按复制捕获简单的按引用捕获作为包展开的简单的按引用捕获带初始化器的按引用捕获当前对象的简单的按引用捕获当前对象的简单的按复制捕获初始化器为包展开的按复制捕获初始化器为包展开的按引用捕获 不可重复捕获 当默认捕获符是 时后继的简单捕获符不能以 开始 struct S2 { void f(int i); }; void S2::f(int i) {[]{}; // OK默认按引用捕获[, i]{}; // OK按引用捕获但 i 按值捕获[, i] {}; // 错误按引用捕获为默认时的按引用捕获[, this] {}; // OK等价于 [][, this, i]{}; // OK等价于 [, i] }当默认捕获符是 时后继的简单捕获符必须以 、*this (C17 起)、this (C20 起) 之一开始。 struct S2 { void f(int i); }; void S2::f(int i) {[]{}; // OK默认按复制捕获[, i]{}; // OK按复制捕获但 i 按引用捕获[, *this]{}; // C17 前错误无效语法// C17 起OK按复制捕获外围的 S2[, this] {}; // C20 前错误 为默认时的 this// C20 起OK同 [] }任何捕获符只可以出现一次并且名字不能与任何形参名相同 struct S2 { void f(int i); }; void S2::f(int i) {[i, i] {}; // 错误i 重复[this, *this] {}; // 错误this 重复C17[i] (int i) {}; // 错误形参和捕获的名字相同 }std::function() 协程
http://www.hkea.cn/news/14517147/

相关文章:

  • 男和女做暖暖网站万维网中文网站到期
  • 建立网站要多少钱一年wordpress撰写文章卡顿
  • 网站左侧导航源码网站维护的内容和步骤
  • 上海黄浦区网站建设网易云音乐网站开发介绍
  • 网站建设数据中心typecho用Wordpress插件
  • 网站服务器维护技术江苏常州网站建设
  • 宁波网站建设公司地址门户网站建设目标
  • 做色流网站网络营销的概念和特点是什么
  • 网站开发集汕头达濠
  • 宁城网站建设淘宝seo优化推广
  • 怎么建设手机网站苏州网站建设最好
  • 局域网建设网站如何访问怎么把网站上传到空间
  • 石家庄网站建设.神鹿网络广州十大设计公司
  • 外贸网站 开源优化营商环境个人心得
  • 贵阳建设网站公司北京做网站的大公司有哪些
  • 南昌网站建设方案成都十大传媒公司
  • 做医采官方网站莆田网站开发
  • 网站建设框架文档网页设计标签大全
  • ip做网站域名现在做电脑做系统网站容易赚钱吗
  • 做网站还是订阅号壹六八信息科技网站建设
  • 贵州中航建设集团网站wordpress能做多用户
  • 网站开发前台 后台技术seo优化主要工作内容
  • 四川省住房和城乡建设厅网站查询设计网站如何推广方案
  • 北京建设工程协会网站企业信息管理系统下载
  • 南昌住房城市建设支行官方网站美食网站建设的栏目和模板
  • 网站的用户登录一般怎么做的有趣的网页设计
  • 建设银行招生网站建站公司用的服务器
  • php红色酒类食品企业网站源码广东建设网证件查询
  • 网站策划编辑html5视频标签
  • jsp做的网站有哪些wordpress多板块