首页 > 编程语言 >高质量C/C++编程指南总结(十)—— const 用法

高质量C/C++编程指南总结(十)—— const 用法

时间:2024-07-18 10:34:19浏览次数:16  
标签:const 函数 int void 编程 C++ 修饰 返回值

const 的用法

1)用 const 修饰函数的输入参数

  • 如果输入的参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起到保护作用。
  • 如果输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加 const 修饰。
  • 对于非内部数据类型的输入参数,应该将“值传递”的方式改为“ const 引用传递”,目的是提高效率。例如将 void Func(A a) 改为 void Func(const A &a)。

2)用 const 修饰函数的返回值

 

  • 如果给以“指针传递”方式的函数返回值加 const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加 const 修饰的同类型指针。
  • 如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加 const 修饰没有任何价值。

3)用 const 修饰类的成员函数

  • const 关键字只能放在函数声明的尾部
class Stack
{
public:
    void Push(int elem);
    int Pop(void);
    int GetCount(void) const; // const 成员函数
private:
    int m_num;
    int m_data[100];
};

int Stack::GetCount(void) const
{
    ++ m_num; // 编译错误,企图修改数据成员 m_num
    Pop(); // 编译错误,企图调用非 const 函数
    return m_num;
}

标签:const,函数,int,void,编程,C++,修饰,返回值
From: https://www.cnblogs.com/moyu557/p/18308919

相关文章

  • Java语言,MySQL数据库;基于Node+Vue的健康信息管理系统的设计与实现32355(免费领源码)计算
    Node.js健康信息管理系统的设计摘要在如今IT技术快速发展和Internet广泛应用的时代,电子和网络技术给人们生活带来了便利,同时也会直接或间接损害人们的健康。所以,本次的毕业设计创作的意义就是通过信息化的统一管理,给用户录入和查看健康信息提供了方便。本设计主要实现集人......
  • C++日志头文件[gpt]
    只要include头文件就能使用,单例模式#ifndefMONITORING_LOGGER_H#defineMONITORING_LOGGER_H#include<iostream>#include<string>#include<sstream>#include<mutex>#include<cstdarg>#include<iomanip>//Setloglevel#defineMO......
  • 高质量C/C++编程指南总结(八)—— C++高级特性
    1.成员函数重载特征相同的范围(在同一个类中)函数名称相同参数不同virtual关键字可有可无2.覆盖的特征覆盖是指派生类函数覆盖基类函数,所以范围不同(分别位于派生类和基类)函数名称相同参数相同基类函数必须有virtual关键字如下示例中,函数Base::f(int)与Base::f(flo......
  • C++ 数组作为函数参数示例
    C++数组作为函数参数示例:#include<iostream>staticvoidprint(constint*beg,constint*end){while(beg!=end){std::cout<<*beg++<<std::endl;}}staticvoidprint(constint*arr,constsize_tsize){for(size......
  • C/C++ 逻辑表达式的注意事项
    在C/C++中,逻辑表达式是用于控制程序流程的重要工具,尤其是在条件语句(如if、while、for等)中。正确使用逻辑表达式对于编写高效、易于理解的代码至关重要。以下是一些使用C/C++逻辑表达式时的注意事项:运算符优先级:逻辑运算符(&&、||、!)具有不同的优先级。!(逻辑非)具有较高的优......
  • C++之动态内存分配
    目录(1)动态内存分配概述A.C++内存空间模型B.What(什么是动态内存分配)C.Why(为什么要进行动态内存分配)D.How(如何进行动态内存分配)(2)定位new运算符A.What(什么是定位new运算符)B.Why(定位new运算符的作用)C.How(如何使用定位new运算符)(3)重载new和delete(1)......
  • 《UDP---FTP网络编程》
    UDP网络编程服务端(1)使用DatagramSocket创建socket,监听6666端口(2)使用DatagramPacket创建数据包(3)调用.receive()接收数据包(4)从数据包中读取数据**注意:使用String构造方法,将字节转换为原始的字符串(5)向客户端发送响应消息客户端(1)使用DatagramSo......
  • 为什么说 Java 没有无符号整数类型?这对编程有哪些潜在影响?
    在Java的设计之初,其创始人詹姆斯·戈斯林(JamesGosling)和团队做出了不包含无符号整数类型(如无符号的byte、short、int、long)的决定。这一设计选择背后有几个原因,同时也给编程带来了一些潜在的影响。让我们逐一探讨。为什么Java没有无符号整数类型?简化设计:Java旨在成为一种......
  • C++--accumulate介绍
    在C++中,accumulate是一个用于对容器中的元素进行累加操作的函数模板,位于头文件中。它允许你对容器(如vector或array)中的元素进行累加运算,并返回累加的结果。源代码展示template<classInputIterator,classType>Typeaccumulate(InputIterator_First,//开始迭代......
  • C++:哈希表特性及开散列哈希表的模拟实现
    目录一、unordered_map1.1特性1.2接口1.21构造函数1.22 iteratorfind(constK& key)1.23 insert1.24 operator[]1.25 erase1.26find1.3哈希概念1.31闭散列哈希表1.32开散列哈希表二、部分功能模拟实现hashtable.hunordered_map.hunordered_set.h......