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

商务网站建设实训心得图片外链生成器

商务网站建设实训心得,图片外链生成器,网站被攻击的方法,上海网站建设的公司左值与右值 字面意思是可以放在等号左边的就是左值,只能放在等号右边的就是右值(为何是“可以”“只能”?例如i是左值,但他依然可以放在等号右边)。 严格上的定义:可以取地址的就是左值,反之为…

左值与右值

字面意思是可以放在等号左边的就是左值,只能放在等号右边的就是右值(为何是“可以”“只能”?例如++i是左值,但他依然可以放在等号右边)。
严格上的定义:可以取地址的就是左值,反之为右值(不具名)。

左值引用

使用方法:在类型后加& 。
只能引用左值,或加const关键字来引用右值,但不能修改,此情况与使用引用的目的相违背(使用引用的目的就是为了修改),所以一般不用。

右值引用

C++11新引入,只能引用右值。
使用方法:在类型后加&&,如T && 。
作用:延长右值生命周期,减少对象的复制,提升性能。

//右值引用
class X {
public:X() {cout << "X()" << endl;}X(const X& x) {cout << "X(const X& x)" << endl;}~X() {cout << "~X()" << endl;}
};X makeX() {X x1;return x1; 
}int main() {X&& x2 = makeX();return 0;
}

以上代码中,调用makeX(),如果不是右值引用需要发生两次拷贝,三次构造,如果用右值引用,makeX()返回的将亡值延长生命周期,只发生一次拷贝,提升性能。但目前很多编译器都已经对此进行了返回值优化,所以在大部分场景无需刻意纠结。

复制构造器与移动构造器

复制构造器形参是一个左值引用。
移动构造器接受一个右值,没有了复制构造中的内存复制。
移动复制构造器的风险:如果一个对象移动到另一个对象时发生异常,造成目标对象不完整,后果无法预测(所以移动构造需要加noexcept关键字)。

class MyString {
public:MyString() :str(nullptr), len(0) {}MyString(const char* ch) :str(nullptr), len(0) {if (ch != nullptr) {len = strlen(ch);str = new char[len + 1];strcpy(str, ch);cout << "Constructor" << endl;}}//拷贝构造函数MyString(const MyString& other) :str(nullptr), len(0) {if (other.str != nullptr) {len = other.len;str = new char[len + 1];strcpy(str, other.str);cout << "Copy Constructor" << endl;}}//移动构造函数MyString(MyString&& other) :str(nullptr), len(0) {str = other.str;len = other.len;other.str = nullptr;other.len = 0;cout << "Move Constructor" << endl;}~MyString() {if (str != nullptr) {delete[] str;str = nullptr;len = 0;}}private:char* str;size_t len;
};int main() {MyString string1("Test");MyString string2(string1);MyString string3(move(string1));return 0;
}

注:使用msvc编译以上代码的时候ide可能会出现如下的错误:

error C4996: ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

vs中在“项目右键–>属性–>C/C++ -->预处理器–>预处理器定义”中添加上“_CRT_SECURE_NO_WARNINGS”即可。
以上代码中move()的作用:将对象的状态或所有权从一个对象转移到另一个对象,将左值引用转化为右值引用,继而可通过右值引用使用该值,以用于移动语义。

万能引用

形如T&&或auto &&并且发生类型推导的引用,包括模板和auto,如:

	//万能引用template <class T>T test(T&& t){}
auto&& x = get_val();

完美转发

特性:在函数内部完美地转发函数实参原始类型和值类型,也就是说,如果函数传入的实参是左值引用,转发时保持实参的左值引用属性和左值引用类型。
完美转发的原理:基于引用折叠,即,实际类型和模板类型只要有左值引用参与进来,最后推导的结果就是一个左值引用(遇左则左)。
两种实现方式:
(1)使用static_cast:

static_cast<T &&>(t);

(2)使用标准库中forward()方法:

forward<T>(t);

注:forward()与move()的区别:move()将一个实参转换为右值引用,并且move()不需要模板实参。

http://www.dinnco.com/news/29722.html

相关文章:

  • 赤城县城乡建设局网站百度seo优化排名
  • 海外推广大使人员优化方案
  • 做双语网站多少钱附近广告公司联系电话
  • wordpress中常用插件安装包厦门seo推广外包
  • 用自己点电脑做电影网站seo如何快速排名百度首页
  • 网站域名想更换要怎么做长沙推广公司
  • 徐州网站建设网络推广贵阳关键词优化平台
  • 网站栏目管理建设百度seo原理
  • 企业网站建设的好处网络营销策划方案框架
  • 网站空间可以通过什么获取随州seo
  • 中创高科官方网站fifa最新排名出炉
  • 158百事通做网站是诈骗吗网络营销策划书的结构
  • 哈尔滨做网站企业杭州小程序建设公司
  • 自己的卡盟网站怎么做分站江苏疫情最新消息
  • 网站开发完整项目案例关键词挖掘网站
  • 如何做盗版网站百度搜索关键词排名
  • 传销公司做网站什么罪名微信推广怎么弄
  • 深圳市设计师服务平台seo软件优化工具软件
  • 深圳wordpress外贸网站建设网站建设优化公司
  • led外贸网站制作网优工程师前景和待遇
  • 大连信联科技做的网站怎么样厦门关键词优化网站
  • 兼职做网站赚钱吗他达拉非什么是
  • 公司建设网站费用会计怎么记怎么让网站被百度收录
  • 百度开发平台seo免费外链工具
  • xampp怎么做网站搜索引擎seo关键词优化效果
  • 动态网站的滚动图片怎么做文案代写收费标准
  • 刚做的网站怎么才能搜索到百度竞价推广公司
  • 网页版梦幻西游地宫迷阵攻略seo店铺描述
  • 环保网站案例b2c有哪些电商平台
  • wordpress网站密码网络营销的整体概念