void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别?

2023-05-16

        const void fun(){};和void const fun(){};两个相同。

  如果采用"按址传递方式"的函数返回值加const 修饰,那么函数返回值(即地址)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。

  如果采用"按值传递方式"的函数返回值加const 修饰,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。

  所以不要尽量不要把int fun2();写成const int fun2(); 因为没意义。

  例:



  #include<iostream>

  using namespace std;

  int num=10; //全局变量

  const int *fun1(){ //按址传递

  return &num; //返回地址

  }

  const int fun2(){ //按值传递 //最好直接写int fun2()

  return num;

  }

  int main()

  {

  const int *fun1();

  // int *t1=fun1(); //错误,必须是const型

  const int *t1=fun1();

  // *t1=20; //按址传递,不能修改其指向变量或常量的值

  cout<<"const int *fun1() :\t"<<*t1<<endl;

  const int fun2(); //最好直接声明成int fun2()

  int t2=fun2(); //非const变量可以更改函数返回值

  const int t3=fun2();

  t2 += 10; //按值传递,可以修改返回值

  cout<<"const int fun2() :\t"<<t2<<endl;

  return 0;

  }



  void fun() const{};

  类的成员函数后面加 const,表明这个函数不可以对这个类对象的数据成员(准确地说是非static数据成员)作任何改变例:

  #include<iostream>

  using namespace std;

  class R

  {

  public:

  R():num1(1){}

  int sum1(int a)const

  {

  // num1=10; //错误,不可以修改非static数据成员

  return a+num1;

  }

  int sum2(int a)const

  {

  num2=2; //正确,修改static数据成员

  return a+num2;

  }

  int sum3(int a) //没有const

  {

  num1=10; //正确,修改非static数据成员

  num2=20; //正确,修改static数据成员

  return a+num1+num2;

  }

  private:

  int num1;

  static int num2;

  };

  int R::num2=0;

  int main()

  {

  cout<<"t.sum1(1):\t"<<t.sum1(1)<<endl;

  cout<<"t.sum2(1):\t"<<t.sum2(1)<<endl;

  cout<<"t.sum3(1):\t"<<t.sum3(1)<<endl;

  return 0;

  }



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别? 的相关文章

  • C语言学习笔记->const和define区别

    1 define 是预编译指令 xff0c 而const 是普通变量的定义 define定义的宏是在预处理阶段展开的 xff0c 而const定义的只读变量在编译运行中使用 2 const定义的是变量 xff0c 而define定义的是常量
  • ES6中const的使用

    const声明一个只读的常量 一旦声明 常量的值就不能改变 且const一旦声明变量 就必须立即初始化 不能留到以后赋值 const的作用域与let命令相同 只在声明所在的块级作用域内有效 const命令声明的常量也是不提升 同样存在暂时性
  • const关键字与指针

    const关键字与指针 1 指针包含的地址是常量 不能被修改 但可以修改指针指向的数据 int x 10 int const p x p 34 指向的数据可以修改 int y 32 p y 不能修改P指向的地址 2 指针指向的数据是常量 不
  • C++的const关键字

    文章目录 一 C 的const关键字 二 const在类中的含义 一 C 的const关键字 这里可以分为两种情况 一种是类似与C语言里面的 const char char const 一种是C 用于类里面限定函数的 const int c
  • C++ 中“(void) new”是什么意思?

    我一直在看 Qttutorial它使用了我以前从未见过的结构 void new QShortcut Qt Key Enter this SLOT fire void new QShortcut Qt Key Return this SLOT
  • 是否存在占用 0 字节的 C++ 类型

    我试图声明一个占用零字节的 C 变量 它在一个联合体中 我从 int 0 类型开始 我不知道这是否实际上是零字节 尽管 sizeof int 0 是 0 我需要一种更好的方法来声明 0 字节类型 并且希望可以将其类型定义为 nullType
  • void() 表达式的目的是什么?

    您不能声明void多变的 void fn void a ill formed 但这编译 void fn void a void object 什么是void 意思是 它有什么用 为什么是void a 格式不正确 同时void OK void
  • 为什么 () => void 返回一些东西?

    我知道下面并不意味着返回 类型 为空 我的理解是 voidFunc 不返回任何内容 因为它返回 void 为什么它返回任何类型 type voidFunc gt void const myFunc voidFunc gt return he
  • 为什么一元 * 运算符没有“操作数不得是指向 void 的指针”的约束?

    C2x 6 5 3 2 地址和间接运算符 约束 2 一元 运算符的操作数应为指针类型 为什么没有 操作数不能是指向的指针 的约束void 虽然可以从以下推论 C2x 6 5 3 2 地址和间接运算符 语义 4 The 一元 运算符表示间接
  • 理解 void 指针

    In my answer https stackoverflow com a 46234805 2411320我提到取消引用void指针是一个坏主意 但是 当我这样做时会发生什么 include
  • 在 c 中: func(void) 与 func() [重复]

    这个问题在这里已经有答案了 当 C 函数不接受任何参数时 是否必须按照语言规则使用 void 参数来声明 定义它 当参数列表中没有任何内容时 PC Lint 似乎会出现问题 我想知道这是否是我不知道的语言语法中的某些内容 Edit 我刚刚发
  • 强制转换为“void”到底有什么作用? [复制]

    这个问题在这里已经有答案了 经常使用的语句 例如 void x 允许抑制有关未使用变量的警告x 但是如果我尝试编译以下内容 我会得到一些我不太理解的结果 int main int x short x void x int x 用 g 编译它
  • c 赋值中的类型不兼容,指针有问题吗?

    您好 我正在使用 C 我有一个关于分配指针的问题 struct foo int bar char car SOME NUMBER this is meant to be an array of char so that it can hol
  • MSVC:为什么“extern void x;”是“非法使用类型'void'”吗?

    为什么这段代码 extern void x 导致 cl t555 c std c11 Za t555 c 1 error C2182 x illegal use of type void 这里什么是非法的 UPD 使用案例 cat t555
  • 将向量作为 void 指针传递给函数

    我有一个回调函数 需要一个void 作为传递参数的参数 我想将向量传递给函数 该函数将被多次调用 因此在回调过程完成后 我希望能够迭代所有已调用的元素push back 通过回调 static void cb void data vecto
  • 为什么 C# 方法不返回值?

    很容易理解为什么method 返回一个值 但我无法理解不返回值的方法的概念 static void PrintName string firstName string lastName Console Writeline firstName
  • 如何使用.NET反射来确定方法返回类型(包括void)和参数?

    如何知道参数的个数和类型 如何知道返回类型 如何检查返回类型是否为void Use MethodInfo ReturnType http msdn microsoft com en us library system reflection
  • java.lang.Void 和 void 有什么区别?

    In API Void 类是一个不可实例化的占位符类 用于保存 对表示 Java 关键字 void 的 Class 对象的引用 什么是 不可实例化 占位符类 什么时候会java lang Void使用 如果类是 不可实例化的 那它有什么用呢
  • 如何从 void 函数返回数据?

    大约一周前 我问了一个有关 activex 和 UDP 的问题 这里是 C UDP Socket 客户端和服务器 https stackoverflow com questions 19786668 c sharp udp socket c
  • 如何将 int 作为“void *”传递给线程启动函数?

    我最初有一个用于斐波那契变量数组的全局变量 但发现这是不允许的 我需要进行基本的多线程处理并处理竞争条件 但我无法在 pthread 创建中将 int 作为 void 参数提供 我尝试过使用常量指针 但没有成功 由于某些奇怪的原因 void

随机推荐

  • linux驱动系列学习之Framebuffer子系统(三)

    一 Framebuffer子系统简介 Framebuffer xff08 帧缓冲 xff09 时Linux系统位显示设备提供的一个接口 属于偏底层的显示接口 它将显示缓冲区抽象 xff0c 屏蔽图像硬件的底层差异 xff0c 允许上层应用程
  • Linux系统通过远程终端修改分辨率

    最近的工作是测试服务器的板载GPU xff0c 由于一切处于开发阶段 xff08 没有USB驱动 xff0c 无法通过键鼠操作 xff09 xff0c 切换桌面分辨率成了一项难题 用谷歌 用百度 xff0c 总算找到了一个在远程终端修改分辨
  • ubuntu安装WPS字体缺失的解决办法

    作者最近新安装的ubuntu系统 xff0c 所以缺少了很多的办公软件 xff0c 之前安装了WPS xff0c 但是Linux系统的wps缺少了windows的字库 xff0c 因此使用起来不太方便 xff0c 所以作者就整理了这样的一份
  • Qt实现串口通信(C++实现串口通信小助手)---串口收发及串口数据解码、串口通信模拟器。

    Qt实现串口通信示例 前言 xff1a 以下串口通信示例 xff0c 参考了现有网上前辈们的资源 xff0c 最后结合部分个人的思想 xff0c 所以下述博客会将实现的原理及代码的案例进行公开 这里我们先上效果图 xff1a 一 串口通信简
  • vins-mobile代码解析3:drawAR

    AR功能主要流程是 xff1a 先检测平面 xff0c 然后计算AR物体 xff08 box xff09 的各个顶点3d位置 xff0c 然后写程序把每个顶点投影到相平面 xff0c 用cv的多边形填充功能来绘制到照片上面 先求一个相机朝向
  • Error:ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol

    MySQL 8 0 33 安装完成 xff0c 使用时候报错 xff1a Error xff1a ER NOT SUPPORTED AUTH MODE Client does not support authentication proto
  • 卡尔曼滤波器和优化的本质理解

    非线性最小二乘优化中 xff0c 最重要的是那个雅克比矩阵 每一行对应一个观察两 xff0c 里面的值代表要减少这个观察量的误差 xff0c 其他被优化的量需要做的改变 而每一列就是这个观察量需要怎么变才能减少不同的观察量 对于一个优化量
  • G2o,GTSAM,Ceres,Tensorflow优化器的方法比较

    首先是一些背景知识 xff1a 最速梯度下降法 xff08 GD xff09 和牛顿法可以用来优化所有种类的函数 牛顿高斯和基于牛顿高斯的LM法只能用来优化非线性最小二乘 SGD是最速梯度下降法的改进 xff0c 也就是每次迭代随即选取一些
  • MSCKF算法研究

    目的 xff1a 找一个能把imu和视觉融合起来的算法 细节 xff1a 网上搜索了下 xff0c 17年初的时候基本VIO算法就是MSCKF最完备 github上面有一个非官方的实现 xff0c 就下下来研究 但是跑kitti的数据都效果
  • SLAM中全局优化初值设置的经验谈

    情况分析 xff1a 有两段轨迹 xff0c 段内的重投影误差很小 xff0c 但是两段轨迹的相对位置有点错位 我们找到了这两段轨迹overlap的一些共视关系 这个时候如果我们直接把两段轨迹放一起做BA xff0c 其实是不能减少这两段轨
  • 视觉建图融合gps的合并工具测试

    描述 xff1a 把两个bag的数据分别计算自己的轨迹后 xff0c 和gps做刚体对齐找两个轨迹的共視关系通过两个轨迹的点云匹配后得到两个轨迹的相似变换 xff0c 把第二个轨迹变换到第一个轨迹的坐标系下加入gps边的pose graph
  • Android.mk for your own module

    这里我们向Android中添加自己的模块 xff0c 只涉及到 so a elf source的编译 xff0c 以及如何将prebuilt file添加进工程 对于APK以及jar的source暂时没有仔细研究 xff0c 要添加进去的话
  • 基于 Distcc 的android分布式编译环境的搭建

    关于Ditscc分布式编译环境的搭建 xff0c 网上也有不少文章 xff0c 但是基本上都过时了 所以看了很多文章 xff0c 走了不少弯路 xff0c 最后总算梳理清楚了一条正确的环境搭建的步骤 xff0c 而且可以实现zeroconf
  • opencv 删除二值化图像中面积较小的连通域

    对于上图的二值化图像 xff0c 要去除左下角和右上角的噪点 xff0c 方法 xff1a 使用opencv去掉黑色面积较小的连通域 代码 CvSeq contour 61 NULL double minarea 61 100 0 doub
  • c++中冒号(:)和双冒号(::)的用法

    转载于 xff1a http fengqing888 blog 163 com blog static 3301141620100623933512 1 冒号 xff08 xff09 用法 xff08 1 xff09 表示机构内位域的定义
  • linux下c语言写的简单的贪吃蛇

    基本算是第一次在linux下写程序 xff0c 果然各种不习惯 用的是emacs xff0c 都说是IDE中的神器 xff0c 但是我还没用习惯 xff0c gdb调试也不怎么熟悉 xff0c linux下的c程序设计也只是看了个皮毛 xf
  • 树莓派无需显示屏的VNC Viewer方式的远程连接

    一 配置wifi连接 方法非常简单 xff0c 首先在SD卡的根目录下添加一个名为 wpa supplicant conf的文件 xff0c 然后在该文件内添加以下的内容 xff1a ctrl interface 61 DIR 61 var
  • 由三点确定一个圆(圆心,半径)

    参考论文 一种改进的随机圆检测算法 光电工程 数据结构 圆信息 struct CircleInfo CvPoint circlecentre 圆心 double raduis 半径 点信息 struct CvPoint int x int
  • Qt Creator+MinGW+OpenCV2.3.1 开发环境搭建(windows 7 系统)

    折腾了一个下午 43 晚上 xff0c 总算弄好了 xff0c 下面说下步骤 1 必备软件 xff1a Qt SDK for Open Source C 43 43 development on Windows xff1a http qt
  • void fun() const{}; const void fun(){}; 和void const fun(){}; 的区别?

    const void fun 和void const fun 两个相同 如果采用 34 按址传递方式 34 的函数返回值加const 修饰 xff0c 那么函数返回值 xff08 即地址 xff09 的内容不能被修改 xff0c 该返回值只