左值右值,柔性数组

el/2024/4/13 14:29:52

一、右值、左值

在c中,左值就是可以被赋值的,右值就是不可被赋值的
在c11标准下:
所有的值必属于左值、右值两者之一。
右值分为纯右值将亡值
在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。
左值有地址,名字与生存期一致,有名字就有生存期。
右值不能取地址。
&&:右值引用,引用普通对象,纯右值(只能引用右值,也就是没有名字的)
&:左值引用,只能引用具有名字的
右值变左值,给一个名字。
在这里插入图片描述

在这里插入图片描述

#include<iostream>
using namespace std;
#include<string>class String
{char* str;
public:String(const char* p = NULL) :str(NULL){if (p != NULL){str = new char[strlen(p) + 1];strcpy(str, p);}str = new char[1];*str = '\0';}~String(){if (str != NULL){delete[] str;}str = NULL;}String& operator=(const String& s){if (this != &s){delete[]str;str = new char[strlen(s.str) + 1];strcpy(str, s.str);}return *this;}String(String&& s)//移动构造{cout << "move copy construct:" << this << endl;str = s.str;s.str = NULL;}String& operator=(String&& s)//移动赋值{if (this != &s){str = s.str;s.str = NULL;}cout << this << "move operator =" << &s << endl;return *this;}};
String fun()
{String s2("zyt");return s2;//返回s2,会生成一个将亡值,将亡值不具有名字
}
int main()
{String s1;s1 = fun();return 0;
}

二、柔性数组

数组的大小声明为0,或者不给出大小,称之为柔性数组。
全局数组和局部数组不能这么定义。

struct sd_node
{
int num;
int size;
char data[];
};
//或
struct sd_node
{
int num;
int size;
char data[0];
}


http://www.ngui.cc/el/4994637.html

相关文章

C++统一初始化和输入输出

一、c统一初始化 C语言中初始化一个量只有赋值语句这一种办法 c中初始化方式比较多 #include<iostream> using namespace std;int main() {int a 10;//c语言中初始化只有赋值语句这一种方法//以下都是c初始化的方法int b(10);//这样有点像对象初始化的形式int c{ 10 …

如何判断是以c++方式编译还是c方式编译

如何判断是以c方式编译还是c方式编译&#xff1f; 通过宏判断&#xff0c;c方式编译有宏 _cplusplus c中没有_cplusplus 在程序中可以利用开关语句&#xff08;探测宏&#xff09; #ifdef _cplusplusprintf("c"); #elseprintf("c"); #endif

关于log4j和slf4j的使用说明

1.log4j是日志类基础&#xff0c;slf4j需要依赖他&#xff0c;同时还需要一个log4j和slf4j的媒介来整合他们俩。简而言之&#xff0c;log4jslf4j&#xff08;slf4j--log4j&#xff09;三位一体才能爽歪歪&#xff01; 2.三者的版本如何搭配选择&#xff1f;答案是&#xff0c;…

通过jug 2.0.jar的成功下载的猜想

1.maven的配置为以下方式时&#xff0c;下载出错 <dependency> <groupId>org.safehaus.jug</groupId> <artifactId>jug</artifactId> <version>2.0.0</version> </dependency> 2.maven以以下配置时&#…

关于项目突然启动缓慢或者停留在Initializing Spring FrameworkServlet xx的原因

1.原因很简单&#xff0c;因为你的项目里出现了断点&#xff0c;所以加载项目很慢&#xff0c;如果你给tomcat设置启动时间了&#xff0c;那么通tomcat就启动失败&#xff01; 2.至于你为什么仔细检查了项目&#xff0c;都没有发现断点&#xff0c;原因很简单&#xff0c;你是…

hql出现could not initialize proxy - no Session的另外一个原因

1.重中之重的原因是表中有非空字段&#xff0c;但是你save or update之时没有注意这个&#xff0c;然后才报了这个错误&#xff01; 2.当然还有就是延迟加载设置的策略&#xff0c;这个你可以搜索别的文章看一看如何设置

微信爬虫机器人的坑篇之无法获取群组的解决方案

1.微信爬虫实现的方案&#xff0c;详情请参考此链接&#xff0c;作者已经说得很明白了https://blog.csdn.net/wonxxx/article/details/51787041 2.但是如果你根据作者这些分析进行机器人操作的话&#xff0c;其中 获取好友列表&#xff08;webwxgetcontact&#xff09;这个功能…

使用SocketChannel和ServerSocketChannel之Address already in use: bind

出现该问题的原因&#xff0c;一个是因为服务器多开了&#xff0c;另外一个极其隐蔽的原因就是客户端使用了bind&#xff08;地址&#xff0c;端口&#xff09;,而服务端也使用了bind&#xff0c;因此导致端口冲突

QQ机器人实现原理之Java篇

1.登录&#xff1a; 前言&#xff1a;QQweb端想要登录&#xff0c;首先有两个很重的参考的文件: 第一个是map.js这个文件&#xff0c;这个文件是进入到QQweb页面&#xff0c;F5刷新刷出来的&#xff0c;记录着几个重要信息的生成方式&#xff1a; 1.登录后&#xff0c;获取好…

关于Ehache使用rmi广播集群失败的原因探讨

前言&#xff1a; 失败的原因有很多种&#xff0c;而我失败的原因竟然只是xsi:noNamespaceSchemaLocation引用用错了&#xff0c;就因为这个让我搞了一个月才发现&#xff0c;悲痛欲绝。 事情经过及处理&#xff1a; 首先说明我引用的jar包ehcache-core-2.6.11.jar&#xff…