iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++11的const怎么引用
  • 508
分享到

C++11的const怎么引用

2023-06-19 11:06:32 508人浏览 安东尼
摘要

本篇内容介绍了“c++11的const怎么引用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const引用在C++语言中,引用是作为一种高效

本篇内容介绍了“c++11的const怎么引用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

const引用

在C++语言中,引用是作为一种高效,安全的传递数据的方式而存在的。除了一般的引用类型,还可以声明const引用。

我们有以下一个Image类。

class Image
{
public:
   Image(int w, int h)
       :width(w), height(h)
   {
       data = new char[getSize()];
   }
   int getSize(){
       return width * height;
   }
   virtual ~Image(){
      if(data != nullptr){
           delete data;
           data = nullptr;
           width = 0;
           height = 0;
       }
   }
private:
   int width = 0;
   int height = 0;
   char* data = nullptr;
}

上面只是这个类的雏形,只有构造函数,析构函数和取得数据大小的功能。

接下来添加比较两个Image是否相同的函数。最简单的形式大致如下。

bool isSame(Image& img)
{
   if(width == img.width
     && height == img.height){
       return (memcmp(data,img.data,getSize())==0);
   }
   else{
       return false;
   }
}

这里使用引用类型的参数,避免了没有必要的拷贝动作。当然我们还可以做得更好:由于比较函数没有必要也不应该对比较对象的内容进行修改,所以还可用下面的形式进行承诺:

bool isSame(const Image& img)
{
   if(width == img.width
     && height == img.height){
       char* in = static_cast<char*>(img.data);
       return (memcmp(data,in,getSize())==0);
   }
   else{
       return false;
   }
}

通过在参数前面增加const修饰符,向isSame方法的调用者保证,不会修改img的内容。

右值引用

继续添加将一个Image的一部分merge到另一个Image上的方法。函数的内容大致如下(这里忽略处理的细节):

void merge(Image& img){
   //接管img中的数据。
   img.height = 0;
   img.width = 0;
   img.data = nullptr;
}

类似的操作在处理在输入对象时一般有两种处理方式。有时希望只是参照而不破坏输入数据,这时可以使用前面讲到的为参数增加const修饰符的方式来承诺;有时为了提高效率或者其他的原因希望可以接管输入的数据,就像上面代码的状态。这时的行为更像是数据移动。

对于第二种方式,如果仅仅定义一般的引用类型,利用者根本没有办法通过方法声明来确定这个操作是否会接管参数中的数据。这种不确定性会造成很大的麻烦。

解决这个问题的方法就是今天文章的题目--右值引用。代码如下:

  

void merge(Image&& img){
   //接管img中的数据。
   img.height = 0;
   img.width = 0;
   img.data = nullptr;
}

我们将参数声明为右值引用,要求像一个临时变量一样任性地使用数据。使用这个函数的方法如下:

Image img1(100, 100);
Image img2(100, 200);
img1.merge(std::move(img2));

注意代码中的std::move,这是标准库中提供的方法,它可以将左值显式转换为右值引用类型,从而告诉编译器,可以像右值(临时变量)一样处理它。同时也意味着接下来除了对img2赋值或销毁以外,不再使用它。

C++11通过使用右值引用提供了一种接管数据的标准方法。

“C++11的const怎么引用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C++11的const怎么引用

本文链接: https://www.lsjlt.com/news/295568.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++11的const怎么引用
    本篇内容介绍了“C++11的const怎么引用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const引用在C++语言中,引用是作为一种高效...
    99+
    2023-06-19
  • C++11的const, const expression和constexpr有什么作用
    这篇文章主要讲解了“C++11的const, const expression和constexpr有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的const, const...
    99+
    2023-06-19
  • C++11关键字const怎么使用
    本篇内容主要讲解“C++11关键字const怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11关键字const怎么使用”吧!一、历史按理来说,要想了解一件事物提出的原因,最好的办法...
    99+
    2023-06-25
  • C++11 关键字 const 使用小结
    Const 的作用及历史 const (computer programming) - Wikipedia 一、历史 按理来说,要想了解一件事物提出的原因,最好的办法就是去寻找当时的...
    99+
    2024-04-02
  • C++中引用与const修饰符怎么用
    这篇文章主要介绍了C++中引用与const修饰符怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、引用引用是给已经定义的变量一个别名,可以简单理解成同一个变量的昵称。既...
    99+
    2023-06-25
  • C++中引用和const关键字怎么用
    今天小编给大家分享一下C++中引用和const关键字怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。引用下面的写法定义了...
    99+
    2023-06-29
  • C++11引用合并怎么实现
    本篇内容介绍了“C++11引用合并怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实参推断考虑下面的模板函数和调用代码。对于前两种情况...
    99+
    2023-06-19
  • C++中的const怎么用
    本文小编为大家详细介绍“C++中的const怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中的const怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。const 是 constant 的缩写,...
    99+
    2023-06-27
  • C++引用的使用与const修饰符
    目录1、引用2、函数引用传递3、引用与const4、const修饰符的优点1、引用 引用是给已经定义的变量一个别名,可以简单理解成同一个变量的昵称。既然是昵称或者是别名,显然它和原本...
    99+
    2024-04-02
  • C++ 函数引用参数的 const 限定符
    在 c++++ 中,const 限定符用于引用参数表示指向一个常量对象的引用,该对象不能在函数内部直接修改。函数可以修改通过 const 引用传递的对象间接引用的成员变量或元素。这对确保...
    99+
    2024-04-19
    c++ const
  • C++关于const与引用的分析讲解
    目录一、关于 const 的疑问二、关于引用的疑问三、小结一、关于 const 的疑问 const 什么时候为只读变量?什么时候是常量? const 常量的判别准则 只有用字面量初始...
    99+
    2024-04-02
  • C++11万能引用和右值引用的方法
    这篇文章主要介绍了C++11万能引用和右值引用的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++11万能引用和右值引用的方法文章都会有所收获,下面我们一起来看看吧。正文实际上,type&&...
    99+
    2023-06-29
  • C# const常量怎么使用
    这篇文章主要介绍“C# const常量怎么使用”,在日常操作中,相信很多人在C# const常量怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C# const常量怎么使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • C语言中const,指针和引用的关系
    目录const 与指针const 与引用const 与指针、引用总结const 与指针 我们写一段代码来探究以下 int a = 10, b = 20; int* p1 = &...
    99+
    2024-04-02
  • C++11中怎么引用限定成员函数
    本篇文章为大家展示了C++11中怎么引用限定成员函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。曳光弹类根据需要的不同,代码也会有所不同。代码除了实现了,构造函数、析构函数以外,还实现了setTe...
    99+
    2023-06-19
  • C++的const限定符怎么使用
    本篇内容介绍了“C++的const限定符怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!const限定符:把变量定义成一个常量1.使用...
    99+
    2023-06-22
  • C++中引用和const关键字介绍
    目录引用常引用const关键字用法1)定义常量2)定义常量指针3)定义常引用总结引用 下面的写法定义了一个引用,并将其初始化为引用某个变量。类型名 & 引用名 = 某变量名;...
    99+
    2024-04-02
  • C++11右值引用方法是什么
    本篇内容介绍了“C++11右值引用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!左值和右值在C++表达式的特性中有一个左值和右值的...
    99+
    2023-06-19
  • C语言中const,指针和引用的关系是什么
    这篇“C语言中const,指针和引用的关系是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中const,指针和引用...
    99+
    2023-06-26
  • C++ 右值引用与 const 关键字详解
    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,const关键字是一种修饰符。修饰符本身,并不产生任何实际代码。就 const 修饰符而言,它用来告...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作