如何在函数声明中使用const

 终渐疯分_501 发布于 2023-01-06 10:17

在opencv中,我碰巧修改了一个作为常量传递给我的函数的变量:

void someFunction(const cv::Mat matrix)
{
  double value = 5.0;
  matrix /= value;
}

它不仅编译,而且在调用之后矩阵仍然被修改someFunction(matrix),即使我没有matrix作为参考传递.我给这家代码编译的解释是,我没有真正改变的任何成员matrixsomeFunction,但地址的内容由指针所指向datamatrix,但我真的不知道.由于我有点困惑,我尝试在一个小程序中重现这种情况:

#include 
using namespace std;

class Foo;
{ 
 private:
  int* ptr;

public:
  Foo()
  {
    ptr = new int[1];
    ptr[0] = 1;
  }

  const Foo& operator += ( const Foo& obj) const
  {
    this->ptr[0] += obj.ptr[0];
    return *this;
  }

};

void changeConst(const Foo var)
{
  Foo foo;
  var += foo;
}

int main() 
{
  Foo obj;
  changeConst(obj);
  return 0;
}

事实证明,这个程序编译并有效地改变ptr[0]obj.我发现如果我以+=这种方式声明运算符:

Foo& operator += ( const Foo& obj)

它不编译.为什么是这样?这一发现在我身上产生了许多问题.有没有办法防止函数中指针内容的改变?函数返回常量引用(const Foo&)的含义是什么?声明函数时应该有什么用处const?简而言之,我应该如何const在声明函数中使用?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有