首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从常量函数返回引用

从常量函数返回引用是指在C++编程中,一个常量函数被声明为返回一个引用。常量函数是指不会修改对象状态的成员函数,它们通常用于提供对对象的只读访问。

在C++中,常量成员函数通常声明为const,以防止它们修改对象的状态。然而,如果常量成员函数返回一个引用,则该引用可能被用户用于修改对象的状态,从而破坏对象的不可变性。

为了避免这种情况,常量成员函数应该返回常量引用,以确保返回的引用不能被用于修改对象的状态。这是一个示例:

代码语言:cpp
复制
class MyClass {
public:
    const int& getValue() const {
        return value;
    }

private:
    int value;
};

在这个示例中,getValue()函数返回一个常量引用,以确保它不能被用于修改对象的状态。

总之,从常量函数返回引用应该避免,因为它可能会导致对象的状态被意外地修改。相反,常量成员函数应该返回常量引用,以确保返回的引用不能被用于修改对象的状态。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++ const常量对象、常量成员函数和常引用

--- — 2 — 常量成员函数 在类的成员函数后面可以加 const 关键字,则该成员函数成为常量成员函数。...这里有两个需要注意的点: 在常量成员函数中不能修改成员变量的值(静态成员变量除外); 也不能调用同类的 非 常量成员函数(静态成员函数除外)。...obj.GetValue; // OK,常量对象上可以执行常量成员函数 return 0; } ---- — 3 — 常量成员函数重载 两个成员函数,名字和参数表都一样,但是一个是...<< "普通成员函数 " << obj2.GetValue() << std::endl; } 执行结果: 常量成员函数 1 普通成员函数 2 ---- — 4 — 常引用 引用前面可以加 const...但是有个问题,对象引用作为函数的参数有一定的风险性,若函数中不小心修改了形参 o,则实参也会跟着变,这可能不是我们想要的,如何避免呢?

1.4K20

c++入门到进阶--引用常量

constexpr函数必须满足下述限制: 函数返回值不能是void类型 函数体不能声明变量或定义新的类型 函数体只能包含声明、null语句或者一条return语句 在形参实参结合后,return语句中的表达式为常量表达式...返回引用类型的函数 连同算术、关系、位运算、后缀自增自减运算符、字面值常量、要求转换的表达式。...当前函数执行完成后主函数调用语句之后的语句恢复执行。 函数在执行完函数体的最后一条语句或或遇到return语句时返回。...返回引用(我觉得特别重要) 函数声明为返回引用,则不需要对return语句中的表达式进行复制,而是返回对象本身。 函数返回引用仅是它所指向对象的一个别名。...不能返回自动局部对象的指针或引用:函数执行结束后,函数占用的栈存储空间被释放,原本位于这段存储空间中的局部对象和临时变量都被释放,返回的局部对象引用或指针指向不再有效的内存区域 重载函数 如果同一个作用域内的几个函数名字相同但形参列表不同

74320

【C++】C++ 引用详解 ⑧ ( 普通引用常量引用 | 常量引用概念与语法 )

二、常量引用 ---- 1、常量引用引入 与 变量引用 相对的就是 常量引用 ; 通过 普通引用 , 可以修改 变量的值 ; 常量引用 , 是不可修改的 , 声明一个 普通变量 的 常量引用 , 之后不再使用...变量 , 转而使用 该 常量引用 , 相当于 将 变量 转为了 常量 ; 常量引用 可以令 变量的引用 转为 常量 ; 即 不能通过 常量引用 修改 变量 ; 如果修改 常量引用 的值 , 编译时会报错..." 普通引用 " ; 使用 " 常量引用 " 可以将一个变量的值传递给一个函数常量引用形参 , 可以保证该变量值不会在函数内部被修改 ; " 常量引用 " 常用于如下场景 : 作为函数形参 作为函数返回值...常量引用 的名称 , 调用该常量引用 , 不可修改 value 变量的值 ; value 是 被引用的 变量 , 调用该变量可以修改变量的值 ; 2、代码示例 - 常量引用不可修改 在下面的函数中 ,...先声明了 普通变量 a , 然后定义了 变量 a 的 常量引用 b , 常量引用 b 其 本质就是一个常量 , 通过 常量引用 b 可以获取 变量 a 的值 , 但是无法修改 变量 a 的值 ; 如果强行通过

23910

【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )

引用 ---- 常引用 : ① 常引用简介 : 引用本身是一个常量指针 , 指针本身的地址不可改变 , 常引用常量指针的基础上 , 将指向的数据也设置成常量 , 即不能通过该引用修改变量的值 ;...; 这里注意 , 不同通过引用进行修改 , 但是可以通过变量名称 a 进行修改 ; ⑤ 作用及意义 : 使用 引用数据类型 作为 函数参数 , 如果不需要在 函数中 修改该引用变量的值 ( 指针指向的数据的值...引用作为参数 ---- C 语言中的参数 分类 : ① 普通变量参数 : C 语言中 普通变量 ( 非指针变量 ) 作为参数 , 只能进行值传递 , 不能通过参数返回结果 ; ② 指针变量参数 : C...语言中 , 如果要让函数的参数可以将结果返回 , 则必须使用指针作为参数 ; C++ 中的引用参数 : C++ 在 C 语言基础上扩展了 引用 数据类型 , 使用引用可以替代上面的指针作为参数的情况 ,...使参数具有返回结果的能力 ; 作用及意义 : ① 具有返回值能力 : 使用引用作参数 , 可以将参数当做返回值使用 ; ② 提高参数传递效率 : 大型对象作参数时 , 使用引用类型 , 可以提高参数传递效率

1.2K10

【Kotlin】函数 ⑧ ( 函数引用 作为函数参数 | ::函数名 | 函数类型 作为函数返回值类型 )

文章目录 一、函数引用作为函数参数 二、函数类型作为函数返回值 一、函数引用作为函数参数 ---- 函数 作为参数 , 有两种方式 : 传递 Lambda 表达式 , 也就是 匿名函数 作为参数值 ;...传递 函数引用 作为参数值 ; 函数引用 可以将 具名函数 转为 函数的参数值 , 只要可以使用 Lambda 表达式 参数的地方 , 就可以使用 函数引用 进行替代 ; 函数引用格式 : 两个冒号...加上 函数名 , 就是函数引用 ; ::函数名 如下 doSomething 函数函数引用 是 ::doSomething ; fun doSomething(name: String, age:...---- 函数返回值类型 , 也可以是 函数类型 ; 也就是说 匿名函数 , Lambda 表达式 可以作为 函数返回值 ; 代码示例 : 下面的代码中 , returnFun 函数返回值...是一个函数类型 (String)->String , 返回的是一个 匿名函数 Lambda 表达式 ; 使用 var fun0 变量 接收 上述函数 返回的 Lambda 表达式 , 并执行该 匿名函数

2.6K10

【C++】C++ 引用详解 ⑩ ( 常量引用案例 )

在 C++ 语言中 , 常量引用引用类型 的一种 ; 借助 常量引用 , 可以将一个变量引用 作为实参 传递给一个函数形参 , 同时保证该值不会在函数内部被修改 ; 这样既保证了参数传递效率 ,...有保证了数据安全 ; 常量引用 的重要使用场景 : 函数参数传递 函数返回值 对象成员 本篇博客会给出 常量引用 的几种案例 ; 一、常量引用语法 1、语法简介 使用 " 普通变量 " 初始化 " 常量引用...int& b = a; 二、常量引用语法 1、int 类型常量引用示例 如果定义 如下函数 , 参数类型为 const int& 类型的常量引用 , // 常量引用作为函数参数 void fun(...常量引用 num 值 , 就会在编译时报错 //num = 0; } int main() { // 定义普通变量 a int a = 10; // 向函数中传入 变量 a 作为常量引用参数...num = 10 Press any key to continue . . . 2、结构体类型常量引用示例 定义一个函数 , 接收结构体类 类型的 常量引用 , 则 结构体常量引用 指向的 对象成员不能被修改

20630

【C++】C++ 引用详解 ③ ( 函数返回值不能是 “ 局部变量 “ 的引用或指针 | 函数内的 “ 局部变量 “ 的引用或指针做函数返回值无意义 )

int a = 10; // 定义变量 a 的引用 b int& b = a; 引用 声明 并 初始化 之后 , 就没有当过右值 , 这是因为 引用 的本质 是 指针常量 , 其本身不可被更改 ;...2、函数返回值特点 函数返回值 几乎很少是 引用 或 指针 ; 函数 的 计算结果 经常是借用 参数中的 地址 / 引用 进行返回的 , 函数返回值 一般返回一个 int 类型的值 , 如果...如果 是 外部的 main 函数中的 变量 的 地址 / 引用 , 那么 肯定是 参数中 传入的 , 那么这个 地址 / 引用 就不需要返回 , 函数内部修改 , 直接体现在了外部的变量中 ; 因此...如果 想要 在 函数中 , 返回 引用 / 指针 , 函数局部变量的 引用 / 指针 是返回不出来的 , 即使强行返回 引用 / 指针 , 也是当前 局部变量 被 分配的 栈内存 地址 , 该函数 执行完毕后..." 引用或指针做函数返回值测试 ---- 下面的 int& getNum2() 函数 , 返回一个引用 , 该 引用 是 局部变量 的引用 ; 下面的 int* getNum3() 函数 , 返回一个指针

32020

【C++】C++ 引用详解 ⑤ ( 函数引用类型返回值 “ 当左值被赋值 )

函数返回值 能作为 左值 , 是很重要的概念 , 这是实现 " 链式编程 " 的基础 ; 一、函数返回值不能是 " 局部变量 " 的引用或指针 1、函数返回值常用用法 在 C++ 语言中 , 函数返回值...如果 是 外部通过 函数参数 传入到函数中的 指针 / 引用 , 没有必要返回 , 外部已经有了 , 你再返回一次意义不大 ; 2、分析函数 " 普通返回值 " 做左值的情况 函数普通返回值 不能做左值...========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 3、分析函数 " 引用返回值 " 做左值的情况 函数引用返回值 可以做左值 ; 下面的 fun2...函数 , 返回 局部变量 中 创建的 静态变量 a 的引用 , 相当于 将 静态变量 的 内存地址返回回去了 , 该 静态变量的 内存地址 直到程序结束之前 都是有效的 , 因此该引用返回值 可以正常使用...为其 赋值 100 , 然后打印 之前获取的 引用值 , 值也变为 100 ; 函数引用返回值 可以作为 左值使用 ; 函数返回值 做 左值 代码示例 : // 导入标准 io 流头文件 // 其中定义了

26730

【C++】C++ 引用详解 ④ ( 函数返回 静态变量 全局变量 的 引用 指针 )

一、函数返回 静态变量 / 全局变量 的 引用 / 指针 1、函数返回局部变量引用或指针无意义 上一篇博客 【C++】C++ 引用详解 ③ ( 函数返回值不能是 “ 局部变量 “ 的引用或指针 | 函数内的...“ 局部变量 “ 的引用或指针做函数返回值无意义 ) 得出如下结论 : 函数返回值 是 “ 局部变量 “ 的 引用 或 指针 时 , 是无意义的 ; 函数 执行完毕后 , 该 函数对应的 栈内存 会被回收..., 相应的 局部变量 地址 也有没有了意义 , 此时 , 再持有一个 函数返回的 没有意义的 引用 / 指针 , 取出的值是随机无意义的值 ; 2、函数返回静态变量/全局变量的引用或指针 函数 返回的是..., 该内存都不会被回收 , 返回它们的 引用 / 指针 , 可以正常访问 对应 内存中的数据 ; 3、代码示例 - 函数返回静态变量/全局变量的引用或指针 在下面的代码中 , fun 函数作为 参照..., 返回普通的 静态变量 ; fun2 函数 返回 静态变量 的引用 ; 上述两个函数的 静态变量 的生命周期 都是 与 程序生命周期相同的 , 只有程序结束时 , 这两个 静态变量的内存才会被回收

18630

引用返回与节省内存

PHP中的引用是什么: 1.在 PHP 中引用意味着用不同的名字访问同一个变量内容 2.引用可以被看作是 Unix 文件系统中的硬链接。...3.使用unset的话,只是删除他这个名字自身对内容的引用,并没有删除内容本身 php > $a="test";$b=&$a;unset($a);var_dump($b); string(4) "test...";$b=&$a;$b=null;var_dump($a); NULL php > $a="test";$b=&$a;$a=null;var_dump($b); NULL php的引用返回与节省内存...: 1.这里必须在两个地方都用 & 符号——指出返回的是一个引用,而不是通常的一个拷贝,同样也指出 $myValue 是作为引用的绑定,而不是通常的赋值 2.返回的必须是类属性的形式 使用引用返回所占内存是...221344 ; 不使用引用返回多次调用后占884968 <?

49620

【Swift4】(5) 函数基本使用 | 可变参数 | inout引用传递 | 函数类型返回值 | 函数嵌套

//nil nickname = "imagine" hello(name: nickname,greet: "Good Night") //Good Night,imagine" 无参数函数,直接返回一个字符串类型的函数...func sayVoid() ->Void{ print("it is a void func") } 使用元组让函数返回多个值 func maxminScores( scores:[Int]...//CvarArg也是可变参数 inout参数 - 引用传递 inout用于声明数据是地址传递,也称之为引用传递; inout修饰的参数是不能有默认值的,有范围的参数集合也不能被修饰; 一个参数一旦被inout...arr.append(Int(arc4random()%100)) } arr func compareTwoInts(a:Int,b:Int) -> Bool{return a>b } arr.sort() 返回函数类型的返回值...Int { return 2*weight } func chooseMailCostMethod(weight:Int) -> (Int)->Int //返回一个Int类型的函数,解耦作用 {

25230

【C++】C++ 引用详解 ② ( 引用的意义 | 引用本质分析 | 引用常量特征 | 引用所占内存空间与指针相同 | 引用在 C++ 编译器实现 | 引用编译时会自动翻译为常量指针 )

, 可以不进行初始化 ; 上述性质 , 类似于 " 常量 " , 说明 引用 具有 " 常量 " 的特征 ; 上述 int& b = a; 代码 , 如果使用 C 语言表达 , 就是 int* const...b = &a; 定义的是一个指针常量 , 该指针是常量 , 指针本身 也就是 指针指向的地址 不可更改 ; 2、引用和变量都是相同的内存空间的别名 将上述 变量 a 和 引用 b 的地址 , 打印出来...---- 1、C++ 引用常量指针 综合上述引用的特征 : 引用具有常量的特征 , 是一个常量 ; 引用和变量都是相同的内存空间的别名 , 其地址都指向内存空间 ; 引用本身也占用内存空间 , 占用大小与指针相同...; 综合上面的三种特点 , C++ 语言编译器 中 , 引用的本质是 : 类型* const 指针名称; 指针 ; 引用在 C++ 语言内部是 常量指针 , 下面 C++ 语言的 " 引用 " 引用类型...& 引用名称 等同于 下面的 C 语言的 " 常量指针 " 指针类型* const 指针名称 C++ 语言中的 引用 , 其在 编译器中的实现 就是 " 常量指针 " , 因此 引用 占用的内存空间与

27620

指针、引用常量的一些“故事”

C++也算是学了有些年头,可惜还是不甚了解,这不,今天对于指针、引用常量这三个在C++中处处可见的东西又有些懵里懵懂了,也罢,今天就稍稍学究一下,再尽力整理一番其中的一些“故事”吧,一则帮助自己记忆...引用本身即带有常量语义(类似int& const 的代码表述会引起编译错误),即你无法改变一个已经赋值的引用本身,类似的赋值操作所改变的仅是引用引用(指向)的数据,并不改变引用本身,所以引用非常类似指针常量...,两者之间只有些微区别(譬如引用不能赋空,但指针常量可以)   示例:   int value = 13;   int& valueRef = value;   valueRef = 17;// 这里你改变的只是...value,valueRef仍然保持对value的引用   5. ...常量引用常量“的”引用,指引用引用(指向)的内容为常量   示例:const Object& object   6.

57510

返回类型引用(ref-qualified)的C++成员函数暗示了什么?

一、引子:返回引用类型的成员函数是 暗示了使用它的this指针是左值还是右值。反过来说,如果一个成员函数返回引用类型,那么对this指针是左值还是右值都是调用同一个函数。...如果成员函数是有一致性(consistency)的,那么non-const, non-static的函数 总是要被&( &-qualified)。...3.1、只对右值形参操作一种场景是上面这个例子,防止用户错误地将一个暂存值传入给函数,然后期盼这个函数做出修改。(换句话说,只允许成员函数操作右值形参。...这个情况这个函数应该被修饰为 &&-qualified)。比如说这个函数对象object取到资源resources,然后处于未指定的状态。...有时候一个成员函数需要有能力类中取到资源,那么他就能被右值rvalue call到,否则,它就是const修饰的成员函数

17820

-公共函数和全局常量

公共函数 服务访问器函数 其他函数 全局常量 核心常量 时间常量 公共函数 服务访问器函数 cache([$key]) 参数: $key (string) – 需从缓存中检索的参数名 (可选)...其他函数 csrf_token() 返回: 当前 CSRF token 名称。...返回: 指定的服务类的实例。 返回类型: mixed 等同于前面所描述的 service() 函数, 除了所有调用该函数返回一个类的新实例。service 返回的是相同的实例。...) – TRUE 若值不需要引用 (Javascript风格) 返回: 字符串包含键值对属性, 逗号分隔 返回类型: string 辅助函数用于转换字符串, 数组, 或者字符串的对象属性...全局常量 以下的常量在你的应用中的任何地方有效。 核心常量 constantAPPPATH app 目录的路径。

3K20
领券