咨询电话:400-035-7887/021-6072 5770
首页 关于我们 下载与支持 产品社区
SPASVO移动站
  • 泽众
  • 自动化测试
    TestOne(一站式自动化测试) ATF(自动化测试框架) AutoRunner(自动化测试) MobileRunner(移动自动化测试)
  • 测试管理
  • 性能测试
    PerformanceRunner (性能测试软件) web pr(在线性能测试) APM (性能监控软件)
  • RPA机器人
  • 研发管理
    ALM(研发管理工具) 代码扫描CA
  • 泽众云测试
    兼容性测试 真机测试 Alltesting云真机
  • 客户案例
  • 合作代理
    为什么加入我们 申请加入代理
  • 全部产品

    性能测试

    PerformanceRunner (性能测试软件) APM(性能监控软件) web-PR(免费在线性能测试)

    RPA机器人

    AutoRunner Process 业务流程挖掘系统

    自动化测试

    TestOne(一站式自动化测试) ATF(自动化测试框架) AutoRunner(自动化测试软件) MobileRunner(移动自动化测试) AR365(自动化测试)

    测试管理

    ALM+TestCenter(生命周期管理软件) ProjectCenter(项目管理软件) TestCenter(测试管理软件) RequisiteCenter(需求管理) CodeAnalyzer(静态分析) 免费版TCE(bug管理工具)

    信创产品

    PerformanceRunner(性能测试软件) ALM+TestCenter(生命周期管理软件) ATF(自动化测试框架) AutoRunner(自动化测试软件) CodeAnalyzer(静态分析)

    测试服务

    第三方验收测试服务 性能测试服务 兼容性测试服务 安全测试服务 SPASVO测试实验室
  • 新闻资讯
  • 解决方案

    金融

    银行 自动化测试解决方案 手机银行兼容性测试解决方案 性能测试解决方案 测试体系与测试管理系统建设解决方案 研发项目管理解决方案 测试管理解决方案 银行众包测试解决方案 大数据测试用例自动生成解决方案 功能测试解决方案 证券公司(投资) 自动化测试解决方案 研发项目管理解决方案 测试管理解决方案 大数据测试用例自动生成解决方案 券商APP兼容性测试解决方案 生产日志回放解决方案 保险 自动化测试解决方案 测试管理解决方案 研发项目管理解决方案 基金 自动化测试解决方案 功能测试解决方案

    研究院所

    需求管理解决方案 真机云测试解决方案 性能测试解决方案 自动化测试解决方案 APM性能调优/全链路压测解决方案 研发项目管理解决方案 测试管理解决方案

    企业

    移动端兼容性测试解决方案 众包测试解决方案 第三方验收测试 性能测试方案 app自动化测试解决方案 安全测试解决方案 自动化测试解决方案 APM性能调优/全链路压测解决方案 研发项目管理解决方案 测试管理解决方案

    高等教育

    软件测试实验室建设方案 测试管理实训方案 测试实训课程方案 性能测试实训方案 移动测试实验室方案 自动化测试实训方案 云真机实验室建设方案 RPA机器人实验室建设方案 软件工程实验室建设方案 高校软件测试教程解决方案 高校软件测试教学资源包解决方案 软件测试教案和课件建设方案 测试学院 测试实战平台 测试实训平台

    医疗行业

    真机云测试解决方案 预决算管理解决方案 第三方验收测试

    政府

    测评中心/机构 真机云测试解决方案 测试实战平台 政府单位/软件园区 性能测试解决方案 自动化测试解决方案 第三方测试解决方案 移动端(app、h5、小程序)兼容性测试解决方案 研发项目管理解决方案 测试管理解决方案
  • 性能测试
  • PerformanceRunner (性能测试软件) APM (性能监控软件)
  • 自动化测试
  • TestOne(一站式自动化测试) ATF(自动化测试框架) AutoRunner(自动化测试) MobileRunner(移动自动化测试)
  • 研发管理
  • ALM(研发项目管理) TestCenter(测试管理软件)
  • RPA机器人
  • 代码扫描CA
  • 云真机
  • 性能测试
  • PerformanceRunner (性能测试软件) APM(性能监控软件) web-PR(免费在线性能测试)
  • RPA机器人
  • AutoRunner Process 业务流程挖掘系统
  • 自动化测试
  • TestOne(一站式自动化测试) ATF(自动化测试框架) AutoRunner(自动化测试软件) MobileRunner(移动自动化测试) AR365(自动化测试)
  • 测试管理
  • ALM+TestCenter(生命周期管理软件) ProjectCenter(项目管理软件) TestCenter(测试管理软件) RequisiteCenter(需求管理) CodeAnalyzer(静态分析) 免费版TCE(bug管理工具)
  • 信创产品
  • PerformanceRunner(性能测试软件) ALM+TestCenter(生命周期管理软件) ATF(自动化测试框架) AutoRunner(自动化测试软件) CodeAnalyzer(静态分析)
  • 测试服务
  • 第三方验收测试服务 性能测试服务 兼容性测试服务 安全测试服务 SPASVO测试实验室
  • 新闻资讯
  • 行业
  • 金融 研究院所 企业 高等教育 医疗行业 政府
  • 关于我们
您的位置:软件测试 >> 测试开发技术 >> .NET

C++的那些事:const用法面面观

作者:网络转载 发布时间:[ 2014/6/10 11:30:03 ] 推荐标签:C++ net

  在成员函数调用的过程中,都有一个 this 指针被当做参数隐性地传递给成员函数(可能通过栈,也可能通过CPU寄存器)。这个this指针,指向调用这个函数的对象(这样,成员函数才能找到成员变量的地址,从而对其进行操作)。这个this指针,是个 const指针,不能修改其指向(你不希望这个对象的函数,修改了那个对象的成员变量,对吧?)。
  传递给const成员函数的this指针,指向一个const对象。也是说,在const成员函数内部,这个this指针是一个指向const对象的const指针。
  mutable 修饰符使得const函数的行为有了一些灵活性。相当于提醒编译器,这个成员变量比较特殊,不要进行任何只读检查了。
  为什么 const 对象只能够调用const成员函数呢?,其实是这样的。由于对象本身通过 const 修饰,那么指向这个对象的指针也是指向const对象的const指针了。换句话说,指向这个对象的this指针是指向const对象的const指针。一般成员函数要求的this指针为:指向对象的const指针。所以此处发生了参数不匹配,无法进行调用。而 const 成员函数要求的this指针,恰恰是 指向const对象的const指针。所以依然能够调用。
  八、const与函数
  将函数的形参用const修饰是希望实参在函数内部不被修改,而一般函数接口可能会遇到以下三种情况:
  1,const对象
  2,指向const对象的指针
  3,绑定const对象的引用
  4,返回值是一个const对象
  首先,我们看const对象的形参,这种接口用const修饰实际上没有任何意义,因为实参在传递给实参时是传递了一份副本,原实参是不会变化的。
1 int main(void)
2 {
3     int var = 42;
4     fun(var);
5     cout << var << endl; // print 42
6     return 0;
7 }
8 void fun( int i)
9 {
10     i = 10;
11 }
  通过上面代码可以看出,实参如果只能过值进行传递,函数接口不用const修改,也不会令实参的值改变。
  而通过指针或引用传递给函数时,函数可以通过形参来改变实参的值,这里如果需要对实参进行保护,则需要在函数接口声明形参为指向const类型的指针或引用。
1 void fun( const int* p)
2 {
3     *p = 42; // error
4     int var = 10;
5     p = &var;  // 可以改变p本身的值
6 }
7 void fun(const int& p)
8 {
9     p = 42; // error,p是一个指向const对象的引用
10 }
  有的时候,我们需要函数的返回值是一个const对象,比如我们考虑一个有理数据类,我们给类定义了一个*的重载。
  1 class Rational{
  2 // ....
  3 };
  4 const Rational operator* (const Rational& lhs, const Rational& rhs);
  5 Rational a, b, c;
  6 a*b = c; // Error,因为左端为一个const对象
  如果上面代码中重载操作符返回对象不是const类型,则a*b=c这个式子成立,实际上这与我们的内置类型的算术运算原则违背了,而我们希望我们设计的类的操作意义要像内置内类一样。

 

上一页1234下一页
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

相关推荐

用C++实现高精度加法理解C++ lvalue与rvalueC++11之智能指针C++程序一个血泪教训理解C++中的异常处理机制一个极简C++单元测试框架C++获取Windows系统的位数C/C++返回内部静态成员的陷阱JAVA、C、C++基本语法的比较c++和python如何实现主机字节序和网络字节序的相互转换C++地址传递C++中的智能指针C++实现双链表的基本功能C++ 友元函数的函数指针C++三大分支结构(顺序、选择、循环)C++智能指针简单剖析

相关产品

机器人流程自动化

机器人流程自动化

自动化测试工具

自动化测试工具

移动平台自动化测试工具

移动平台自动化测试工具

测试管理工具

测试管理工具

代码质量管理

代码质量管理

软件研发生命周期管理

软件研发生命周期管理

ATF自动化测试框架软件

ATF自动化测试框架软件

性能测试工具

性能测试工具

项目管理软件

项目管理软件

需求管理软件

需求管理软件

更新发布

App、小程序、H5兼容性测试区别在哪些?

2024/9/11 15:34:34

兼容性测试覆盖多少机型,如何选择?

2024/9/10 11:13:49

P-One 在进行性能测试时,如何确保测试结果的准确性和可靠性?

2024/9/10 10:14:12

为什么越来越多的企业选择一站式测试平台?

2024/9/9 18:04:26

功能测试和接口测试的区别

2023/3/23 14:23:39

如何写好测试用例文档

2023/3/22 16:17:39

常用的选择回归测试的方式有哪些?

2022/6/14 16:14:27

测试流程中需要重点把关几个过程?

2021/10/18 15:37:44

热门文章

常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南

咨询电话

021-6072 5770-8054

沪公网安备 31010702002953号

沪ICP备07036474号 2003-2020 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd.

测试工具快速入口

测试管理工具/缺陷管理工具 项目管理软件 自动化测试工具/功能测试工具 移动自动化测试工具/App测试工具 ALM生命周期管理 性能测试工具/压力测试工具 Selenium自动化测试框架 RPA机器人流程自动化

帮助与支持

测试服务 RPA解决方案 核心业务系统测试解决方案 测试用例设计解决方案 接口测试解决方案 界面自动化测试解决方案 移动端自动化测试解决方案 性能测试解决方案 需求管理解决方案 代码管理解决方案 预决算管理解决方案 兼容性测试解决方案 众测(众包测试)测试解决方案 搭建测试体系解决方案 第三方验收测试解决方案 安全测试解决方案

关注我们

咨询热线:021-6072 5770-8054

金融专线:021-6072 5770-8006

sales@spasvo.com

沪ICP备07036474号 2003-2022 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd.
公众
账号

扫描二维码
关注泽众微信公众号

泽众官网公众号
问题
反馈
返回
顶部