C++11 语法记录

c++11特性(详细) 在本篇文章,我们将会详细介绍一下C++11新增的一些特性,其中最重要的是右值引用,智能指针等,这其中也产生了很多不必要的语法设计。在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。 阅读详情

转自:http://blog.youkuaiyun.com/crayondeng/article/details/18563121

一、Lambda表达式

C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下:
              [函数对象参数] (操作符重载函数参数) mutable或exception声明 ->返回值类型 {函数体}
      可以看到,Lambda主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable或exception声明、->返回值类型、{函数体}。下面分别进行介绍。
     一、[函数对象参数],标识一个Lambda的开始,这部分必须存在,不能省略。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量(包括Lambda所在类的this)。函数对象参数有以下形式:
           1、空。没有使用任何函数对象参数。
           2、=。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)。
           3、&。函数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的this),并且是引用传递方式(相当于编译器自动为我们按引用传递了所有局部变量)。
           4、this。函数体内可以使用Lambda所在类中的成员变量。
           5、a。将a按值进行传递。按值进行传递时,函数体内不能修改传递进来的a的拷贝,因为默认情况下函数是const的。要修改传递进来的a的拷贝,可以添加mutable修饰符。
           6、&a。将a按引用进行传递。
           7、a, &b。将a按值进行传递,b按引用进行传递。
           8、=,&a, &b。除a和b按引用进行传递外,其他参数都按值进行传递。
           9、&, a, b。除a和b按值进行传递外,其他参数都按引用进行传递。
      二、(操作符重载函数参数),标识重载的()操作符的参数,没有参数时,这部分可以省略。参数可以通过按值(如:(a,b))和按引用(如:(&a,&b))两种方式进行传递。
      三、mutable或exception声明,这部分可以省略。按值传递函数对象参数时,加上mutable修饰符后,可以修改按值传递进来的拷贝(注意是能修改拷贝,而不是值本身)。exception声明用于指定函数抛出的异常,如抛出整数类型的异常,可以使用throw(int)。
      四、->返回值类型,标识函数返回值的类型,当返回值为void,或者函数体中只有一处return的地方(此时编译器可以自动推断出返回值类型)时,这部分可以省略。
      五、{函数体},标识函数的实现,这部分不能省略,但函数体可以为空。

下面给出一个例子:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. class CTest  
  2. {  
  3. public:  
  4.     CTest() : m_nData(20) { NULL; }  
  5.     void TestLambda()  
  6.     {  
  7.         vector<int> vctTemp;  
  8.         vctTemp.push_back(1);  
  9.         vctTemp.push_back(2);  
  10.           
  11.         // 无函数对象参数,输出:1 2  
  12.         {  
  13.             for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; });  
  14.         }  
  15.           
  16.         // 以值方式传递作用域内所有可见的局部变量(包括this),输出:11 12  
  17.         {  
  18.             int a = 10;  
  19.             for_each(vctTemp.begin(), vctTemp.end(), [=](int v){ cout << v+a << endl; });  
  20.         }  
  21.           
  22.         // 以引用方式传递作用域内所有可见的局部变量(包括this),输出:11 13 12  
  23.         {  
  24.             int a = 10;  
  25.             for_each(vctTemp.begin(), vctTemp.end(), [&](int v)mutable{ cout << v+a << endl; a++; });  
  26.             cout << a << endl;  
  27.         }  
  28.           
  29.         // 以值方式传递局部变量a,输出:11 13 10  
  30.         {  
  31.             int a = 10;  
  32.             //注意:在lambda表达式中的 a 只是一个拷贝,添加mutable之后,可以修改a的值,但只是修改拷贝的a  
  33.             for_each(vctTemp.begin(), vctTemp.end(), [a](int v)mutable{ cout << v+a << endl; a++; });  
  34.             cout << a << endl;  
  35.         }  
  36.           
  37.         // 以引用方式传递局部变量a,输出:11 13 12  
  38.         {  
  39.             int a = 10;  
  40.             for_each(vctTemp.begin(), vctTemp.end(), [&a](int v){ cout << v+a << endl; a++; });  
  41.             cout << a << endl;  
  42.         }  
  43.           
  44.         // 传递this,输出:21 22  
  45.         {  
  46.             for_each(vctTemp.begin(), vctTemp.end(), [this](int v){ cout << v+m_nData << endl; });  
  47.         }  
  48.           
  49.         // 除b按引用传递外,其他均按值传递,输出:11 12 17  
  50.         {  
  51.             int a = 10;  
  52.             int b = 15;  
  53.             for_each(vctTemp.begin(), vctTemp.end(), [=, &b](int v){ cout << v+a << endl; b++; });  
  54.             cout << b << endl;  
  55.         }  
  56.           
  57.         // 操作符重载函数参数按值传递,输出:1 2  
  58.         {  
  59.             for_each(vctTemp.begin(), vctTemp.end(), [](int v){ cout << v << endl; });  
  60.         }  
  61.           
  62.         // 操作符重载函数参数按引用传递,输出:2 3  
  63.         {  
  64.             for_each(vctTemp.begin(), vctTemp.end(), [](int &v){ v++; cout<<v<<endl;});  
  65.         }  
  66.           
  67.           
  68.         // 空的Lambda表达式  
  69.         {  
  70.             [](){}();  
  71.             []{}();  
  72.         }  
  73.     }  
  74.       
  75. private:  
  76.     int m_nData;  
  77. };  


二、auto 关键字

C++ 11中引入的auto主要有两种用途:自动类型推断和返回值占位。

auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用auto的例子。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto a; // 错误,没有初始化表达式,无法推断出a的类型    
  2. auto int a = 10 // 错误,auto临时变量的语义在C++ 11中已不存在    
  3. auto a = 10    
  4. auto c = 'A'   
  5. auto s("hello");    
  6. vector<int> vctTemp;    
  7. auto it = vctTemp.begin();    
  8. auto ptr = [](){ cout << "hello world" << endl; };  

使用auto经常意味着较少的代码量(除非你需要的类型是int这种只有一个单词的)。当你想要遍历STL容器中元素的时候,想一想你会怎么写迭代器代码,老式的方法是用很多typedef来做,而auto则会大大简化这个过程。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. std::map<std::string, std::vector<int>> map;  
  2. for(auto it = begin(map); it != end(map); ++it)   
  3. {  
  4. }  

另外,在使用模板技术时,如果某个变量的类型依赖于模板参数,不使用auto将很难确定变量的类型(使用auto后,将由编译器自动进行确定)。

下面是一个具体的例子。

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. template <class T, class U>    
  2. void Multiply(T t, U u)    
  3. {    
  4.       auto v = t*u;    
  5. }  

auto返回值占位,主要与decltype配合使用,用于返回值类型后置时的占位。
[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. template <typename T1, typename T2>  
  2. auto compose(T1 t1, T2 t2) -> decltype(t1 + t2)  
  3. {  
  4.    return t1+t2;  
  5. }  
  6. auto v = compose(2, 3.14); // v's type is double  

你应该注意到,auto并不能作为函数的返回类型,但是你能用auto去代替函数的返回类型,当然,在这种情况下,函数必须有返回值才可以。auto不会告诉编译器去推断返回值的实际类型,它会通知编译器在函数的末段去寻找返回值类型。在上面的那个例子中,函数返回值的构成是由T1类型和T2类型的值,经过+操作符之后决定的。


自动化推导decltype

关于 decltype 是一个操作符,其可以评估括号内表达式的类型,其规则如下:

  1. 如果表达式e是一个变量,那么就是这个变量的类型。
  2. 如果表达式e是一个函数,那么就是这个函数返回值的类型。
  3. 如果不符合1和2,如果e是左值,类型为T,那么decltype(e)是T&;如果是右值,则是T。

原文给出的示例如下,我们可以看到,这个让的确我们的定义变量省了很多事。


  1. const vector<int> vi;  
  2. typedef decltype (vi.begin()) CIT;  
  3. CIT another_const_iterator;  

还有一个适合的用法是用来typedef函数指针,也会省很多事。比如:

  1. decltype(&myfunc) pfunc = 0;  
  2. typedef decltype(&A::func1) type;  

三、std::function

类模版 std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标进行存储、复制、和调用操作,这些目标包括函数、lambda表达式、绑定表达式、以及其它函数对象等。

用法示例:

①保存自由函数

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. void printA(int a)  
  2. {  
  3.     cout<<a<<endl;  
  4. }  
  5.   
  6.  std::function<void(int a)> func;  
  7.  func = printA;  
  8.  func(2);  
运行输出: 2

②保存lambda表达式

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. std::function<void()> func_1 = [](){cout<<"hello world"<<endl;};  
  2.     func_1();  
运行输出:hello world

③保存成员函数

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. struct Foo {  
  2.     Foo(int num) : num_(num) {}  
  3.     void print_add(int i) const { cout << num_+i << '\n'; }  
  4.     int num_;  
  5. };  
  6.   
  7.  // 保存成员函数  
  8.     std::function<void(const Foo&, int)> f_add_display = &Foo::print_add;  
  9.     Foo foo(2);  
  10.     f_add_display(foo, 1);  

运行输出: 3


四、bind

bind是一组用于函数绑定的模板。在对某个函数进行绑定时,可以指定部分参数或全部参数,也可以不指定任何参数,还可以调整各个参数间的顺序。对于未指定的参数,可以使用占位符_1、_2、_3来表示。_1表示绑定后的函数的第1个参数,_2表示绑定后的函数的第2个参数,其他依次类推。

下面通过程序例子了解一下用法:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <iostream>  
  2. using namespace std;  
  3. class A  
  4. {  
  5. public:  
  6.     void fun_3(int k,int m)  
  7.     {  
  8.         cout<<k<<" "<<m<<endl;  
  9.     }  
  10. };  
  11.   
  12. void fun(int x,int y,int z)  
  13. {  
  14.     cout<<x<<"  "<<y<<"  "<<z<<endl;  
  15. }  
  16.   
  17. void fun_2(int &a,int &b)  
  18. {  
  19.     a++;  
  20.     b++;  
  21.     cout<<a<<"  "<<b<<endl;  
  22. }  
  23.   
  24. int main(int argc, const char * argv[])  
  25. {  
  26.     auto f1 = bind(fun,1,2,3); //表示绑定函数 fun 的第一,二,三个参数值为: 1 2 3  
  27.     f1(); //print:1  2  3  
  28.       
  29.     auto f2 = bind(fun, placeholders::_1,placeholders::_2,3);  
  30.     //表示绑定函数 fun 的第三个参数为 3,而fun 的第一,二个参数分别有调用 f2 的第一,二个参数指定  
  31.     f2(1,2);//print:1  2  3  
  32.       
  33.     auto f3 = bind(fun,placeholders::_2,placeholders::_1,3);  
  34.     //表示绑定函数 fun 的第三个参数为 3,而fun 的第一,二个参数分别有调用 f3 的第二,一个参数指定  
  35.     //注意: f2  和  f3 的区别。  
  36.     f3(1,2);//print:2  1  3  
  37.       
  38.       
  39.     int n = 2;  
  40.     int m = 3;  
  41.       
  42.     auto f4 = bind(fun_2, n,placeholders::_1);  
  43.     f4(m); //print:3  4  
  44.   
  45.     cout<<m<<endl;//print:4  说明:bind对于不事先绑定的参数,通过std::placeholders传递的参数是通过引用传递的  
  46.     cout<<n<<endl;//print:2  说明:bind对于预先绑定的函数参数是通过值传递的  
  47.       
  48.       
  49.     A a;  
  50.     auto f5 = bind(&A::fun_3, a,placeholders::_1,placeholders::_2);  
  51.     f5(10,20);//print:10 20  
  52.       
  53.     std::function<void(int,int)> fc = std::bind(&A::fun_3, a,std::placeholders::_1,std::placeholders::_2);  
  54.     fc(10,20);//print:10 20  
  55.       
  56.     return 0;  
  57. }  

五、nullptr -- 空指针标识

空指针标识(nullptr)(其本质是一个内定的常量)是一个表示空指针的标识,它不是一个整数。(译注:这里应该与我们常用的NULL宏相区别,虽然它们都是用来表示空置针,但NULL只是一个定义为常整数0的宏,而nullptr是C++0x的一个关键字,一个内建的标识符。下面我们还将看到nullptr与NULL之间更多的区别。)
    char* p = nullptr;
    int* q = nullptr;
    char* p2 = 0;           //这里0的赋值还是有效的,并且p=p2

    void f(int);
    void f(char*);

    f(0);         //调用f(int)
    f(nullptr);   //调用f(char*)

    void g(int);
    g(nullptr);       //错误:nullptr并不是一个整型常量
    int i = nullptr;  //错误:nullptr并不是一个整型常量
(译注:实际上,我们这里可以看到nullptr和NULL两者本质的差别,NULL是一个整型数0,而nullptr可以看成是一个空指针。)


六、final 和 override

两者都是用在对于继承体系的控制。

final

用来标明被这个修饰符修饰的class/struct和虚函数已经是最终版本,无法被进一步继承.

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. class Base final  
  2. {  
  3. public:  
  4.     virtual void test(){}  
  5. };  
  6.   
  7. class D1:public Base  
  8. {  
  9.     void test(){}  
  10. };  

如这个例子,Base类被final修饰,表示其已经无法被继承,编译器会提示如下错误:error C3246: ‘D1′ : cannot inherit from ‘Base’ as it has been declared as ‘final’

再看另外一个例子:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. class Base  
  2. {  
  3. public:  
  4.     virtual void test(){}  
  5. };  
  6.   
  7. class D1:public Base  
  8. {  
  9.     void test() final {}  
  10. };  
  11.   
  12. class D2 :public D1  
  13. {  
  14.     void test(){}  
  15. };  

此时虚函数test在D1被final标识,已经表明其是最终版本,无法进一步继承.

override

override关键字用来表示在子类的函数一定重载自基类的同名同性质的虚函数或者纯虚函数,否则无法被编译.

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. class Base  
  2. {  
  3. public:  
  4.     virtual void test(){}  
  5.     virtual void test2(int i) {}  
  6.     virtual void test3() const {}  
  7. };  
  8.   
  9. class D1:public Base  
  10. {  
  11.     void test() override {}  //编译正确  
  12.     void test2(float i) override {} //编译错误,参数不一致  
  13.     void test3() override {} //编译错误,函数常量性不一致  
  14.     void test4() override {} //编译错误,并不是重载父类虚函数  
  15. };  

需要注意的一点是,final和override两者很有可能在C++ 98的代码里面被程序员大量的用在其他地方命名,因此C++ 11为了保持和之前代码的兼容性,所以这两个标记只有在修饰class/struct和函数的时候,才会被当成关键字。也就是说,在其他地方依然可以使用这两个字符命名成变量/函数/类/结构体.

比如:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. class Base  
  2. {  
  3. public:  
  4.     virtual void test()  
  5.     {  
  6.         int final = 1;  
  7.     }  
  8.     virtual void test2(int i) {}  
  9.     virtual void test3() const {}  
  10.     virtual void override();  
  11. };  

这是正确的.
c++11特性 c++新标准移动语义和右值引用复习前面c++11功能二级标题三级标题四级标题五级标题六级标题Lambda表达式一级标题二级标题三级标题四级标题五级标题六级标题包装器模板function和可变参数模板一级标题二级标题三级标题四级标题五级标题六级标题 移动语义和右值引用 复习前面c++11功能 1.新类型 二级标题 三级标题 四级标题 五级标题 六级标题 Lambda表达式 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 包装器模板function和可变参数模板 一级标题 二级标题 三级标题 四级标 阅读详情

相关推荐

安装LR11中Microsoft Visual c++2005 sp1报错

安装LoadRunner11 时,安装Microsoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”可获取帮肋信息1、进入loadrunner-11\Additional Components\IDE Add-Ins\MS Visual Studio .NET 2、安装:LRVS2005IDEAddInSetup.exe3、再安装loadrunne...

yuan_ahui的博客 5077

【C++基础】C++11的新特性

C++新特性主要包括包含语法改进和标准库扩充两个方面

dnty00的博客 1万+

拼多多面试题记录

进程:进程是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位。它包含了程序执行所需的各种资源,如内存空间、文件描述符、寄存器状态等。可以将进程看作是一个正在运行的程序的实例。线程:线程是进程中的一个执行单元,是 CPU 调度和分派的基本单位。一个进程可以包含多个线程,这些线程共享进程的大部分资源,但每个线程有自己独立的执行栈、程序计数器和寄存器等。在操作系统中引入线程主要是为了在多个执行单元间实现更高效的并发处理,以提升系统资源利用率和程序响应速度。

weixin_45793544的博客 1015

C++11新特性总结

C++11新特性总结

小杰312的博客 2万+

C++11的新特性

C++11标准引入了许多重要的新特性,这些特性旨在提高C++的编程效率、安全性和性能。

weixin_39291964的博客 1451

基于STM32的智能交通灯管理系统设计

本项目基于STM32微控制器设计了一个智能交通灯管理系统,通过多个传感器模块实现对交通灯的智能化控制。项目涉及硬件电路设计、传感器数据采集和逻辑控制实现,适用于城市交通路口或小区路口。该基于STM32的智能交通灯系统通过超声波传感器实现了流量监测,结合LED和蜂鸣器实现了自动交通信号控制,适用于城市或社区路口。基于STM32CubeMX生成的框架,编写红绿灯切换、流量监测和蜂鸣器控制的代码。以下为主循环,通过不断读取传感器数据,结合交通灯和蜂鸣器模块实现智能交通灯控制。

2401_88410555的博客 2062

C++11 语法记录

一、Lambda表达式 C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下:               [函数对象参数] (操作符重载函数参数) mutable或exception声明 ->返回值类型 {函数体}       可以看到,Lambda主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable或ex

小邓笔记 7228

[Ethernet in CANoe]2--如何在CANoe中去仿真CP版本的SOME/IP通信

上篇文章()介绍了SOME/IP的两种类型的数据格式,根据作者目前的项目经验,目前在CANoe V18之前的版本,CP版本的arxml是最方便实现SOME/IP以太网仿真的。作者目前只有CANoe V17的license,所以本片文章是在CANoe 17上基于CP版本的arxml去做仿真模拟。

汽车ECU自动化测试 1764

mac vscode报错 C++11 语法

macOS vscode报错C11标准欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想

Misdirection 1509

sap 标准委外和工序委外_SAP PP 工序委外详解

在SAP里有外包和外协两种:外包:指把原材料发出去,扣减库存,然后供应商加工生产,最后再作为成品入库。主要是在MM模块下实现的。对应的英语叫Subcontracting。外协:一般是指某种工序外协,在工艺路线里设置某个工序为外协后,系统自动会产生一个采购订单,一般是指采购某种服务。采购回来后再继续本公司的其他工序。主要是在PP模块下实现的。对应的英语叫Processing。2.当有委外加工的业务流...

weixin_26849971的博客 4577

【论文翻译】Enhancing Channel Estimation in High Mobility OTFS Systems: A Novel Pilot-Based Method...

本文介绍了一种用于正交时频空间(OTFS)调制系统的新型基于导频的信道估计方法。我们提出的方法是在ZP-OTFS系统的零填充区域插入一行导频符号,具有减少开销和降低峰均功率比(PAPR)的显著优势。特别是,通过沿多普勒轴分布导频符号,我们的方法在高移动性场景下依然能够提供鲁棒且精确的信道估计,这是像TransPod这种时速超过1000 km/h的运输系统的一个典型特征。这一点至关重要,因为在此类场景下,多普勒频移可能会导致系统性能的严重退化。

Cuby的博客 1210

[C++]C++11 语法记录: Lambda简单入门

一、Lambda表达式C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下:              [函数对象参数] (操作符重载函数参数) mutable或exception声明 ->返回值类型 {函数体}      可以看到,Lambda主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable或exception声明、

汪海的实验室 4340

继电器的选型规范

触点是继电器中最重要的结构件,触点的使用寿命受触点材料、触点上的电压及电流值(特别是接通时及断开时的电压、电流波形)、负载种类、切换频率、环境情况、接触形式、触点回跳现象等的影响,触点失效多以触点的材料转移、粘连、异常消耗、接触电阻增大等故障现象出现,使用时需要注意。为了稳定工作, DC 型继电器的线圈两端所加电压推荐使用波纹变化率小于±5%的线圈额定电压,否则继电器会工作不稳定,引起触点的粘接或异常损耗,特别是在继电器的驱动电路上连接有电动机、螺线管、变压器等器件时,这种情况更为明显。

qq_43416206的博客 1878

【记录一个问题】用ndk的gcc命令行无法编译C++11的lambda等语法的代码

/Users/ahfu/code/android/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc-4.9.x-pie-fPIC-g--sysroot=/Users/ahfu/code/android/android-ndk-r...

weixin_34228617的博客 302

微信小程序视频内容服务类目审核不过?绕过审核的两种思路!

虽然不推荐绕过官方审核,但在实际项目中,总有一些特殊情况:比如,最近开发的小程序涉及视频播放,提交审核时,被官方要求补充“教育服务 - 在线视频课程”类目。但我们的内容只是车辆使用介绍,并非教育课程,无法提供相应资质。该怎么办?很多开发者发现,小程序开发不是最难的,审核才是最难的。 微信为了规避法律风险,要求某些功能必须提供资质。例如:然而,并不是所有公司都能轻松申请到这些资质,甚至有些资质根本不适用于我们的业务,导致审核卡住,无法上线。就像我遇到的这个问题,官方要求我们补充“在线视频课程”类目,但实际业务

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3238

KubeVela入门到精通-K8S多集群交付

KubeVela是一个功能强大、易于使用、高度可扩展的应用交付与管理平台。它基于Kubernetes和OAM 技术构建,通过开放应用模型(OAM)来作为顶层的抽像,提供了声明式部署、多集群/混合环境支 持、插件与扩展性、中心化管控以及易于使用与可观测性等特点。

小杨同学的博客 1269

QZXing不适用于C++11语法?

重新整理写过的程序,发现了一个诡异的问题。将使用了QZXing的源程序包移动到另一个文件夹后,build,出现QZXing中的某个文件出现错误。 一步步回溯问题可能出现的地方。发现这个程序最开始的版本中并没有需要C++11支持的语法(如lambda表达式),因此.pro文件中也没有CONFIG += c++11这一句,也许就是这里出了问题。 删去.pro文件中的CONFIG += c++11,并且...

随便写写 352

【React】1、React入门与概览(JSX语法)

React入门 文章目录React入门一、React全家桶1. React是什么?2. 谁开发的?3. 为什么要学?4. React的特点5. 学习React之前要掌握的JavaScript基础知识二、React 概览组件JSXVirtual DOM关于虚拟DOM:Data Flow三、React基本使用相关js库四、React JSXJSX 语法规则五、模块与组件、模块化与组件化的理解5.1 模块5.2 组件5.4 模块化5.5 组件化 一、React全家桶 React基础 React-Router(R

Coding and studying 1379

[C++11] 变长参数模板

说明:C++11 引入了可变参数模板(Variadic Templates)这一功能,也称为变长模板参数。它允许创建可以接受任意数量参数的模板函数或类。args...这个示例展示了可变参数模板的强大功能,可以用来实现类似 printf 这样的可变参数函数。通过递归调用的方式,可以处理任意数量和类型的参数。

wangdsh的博客 1810

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++ primer plus学习笔记(一)——基础语法

本来是java方向的程序员,因为部门语言需要最近开始学习cpp,刚看到C++ primer plus这本书的第10章,在进入cpp的面向对象学习前,先整理下前面9章的知识笔记,以下内容基于c++11标准 指针与&、* &在c++中的一种作用为取出当前变量在内存的逻辑地址 *在c++中的一种作用为取出当前逻辑地址对应的内存空间的值 c++中提供指针变量存储对象的地址,指针的运算会被编...

weixin_44627989的博客 666

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MDK上使用C++编程笔记

MDK上使用C++编程笔记 去发现同类优质开源项目:https://gitcode.com/ 本文档详细记录了在MDK环境下第一次尝试使用C++编程的笔记。本笔记适用于Keil uVision5.11.1.0版本,旨在帮助开发者更好地在MDK中应用C++进行程序编写。以下是笔记的主要内容概述: 环境设置:介绍如何在Keil uVision5.11.1.0中配置C++编程环境。 基本语法:梳理C+...

gitblog_06760的博客 352

C++11新特性-----lambada表达式(函数对象、闭包)

作用: Lambda 表达式实际上就是提供了⼀个类似匿名函数的特性,⽽匿名函数则是在需要⼀个函数,但是⼜不想费⼒去命名⼀个函数的情况下去使⽤的。利⽤ lambda 表达式可以编写内嵌的匿名函数,⽤以替换独⽴函数或者函数对象,并且使代码更可读。 这里简单介绍一下函数对象: 一个函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象。举个最简单的例子: class myprint { public: voi

居老师的博客 583
上一篇: SSL handshake failed: SSL error: Key usage violation in certificate has been detected.
下一篇: Cocos2d-x 3.0 新特性- 回调函数的变化
骑行的蜗牛
博客等级 码龄21年 107粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值