2 sinat 26447335 sinat_26447335 于 2016.04.12 02:12 提问

为什么一个const属性的返回值可以用 非const 型来接受呢?

const int func() { int j = 8; return j; } int main() {int i = 5 ;i = func(); }
为什么可以翻译通过呢?

2个回答

msdnwolaile
msdnwolaile   2016.04.12 03:05
已采纳

const int func()
说明函数func()的返回值是一个常数,不想让对象再次被修改,因为const一定是先被初始化的
而在主函数中的:i = func(),只能说明是将一个常数值赋值给一个变量,很正常啊!!!

还不懂的话,可以看看这个:http://blog.csdn.net/msdnwolaile/article/details/50049173

msdnwolaile
msdnwolaile 回复sinat_26447335: 嗯嗯,(可以这样理解)说的很有道理,开始我还不太确定用到了临时变量,查了一下资料,才确定了,谢谢啊,也就是说函数的返回过程都是会产生一个临时变量的,就是类似于C++中的临时对象,实质上:函数的返回和传参都是一个赋值的过程,,,
2 年多之前 回复
sinat_26447335
sinat_26447335 那个我想问一下等于说是首先把j赋给一个匿名临时变量,这个匿名临时变量被修饰为const,然后再用这个值来复制给I,可以这样理解吗?
2 年多之前 回复
curry_du
curry_du   2016.04.12 07:37

由于有const修饰,返回值为整型常量,整型常量还是整型,所以赋值给一个整型变量没问题

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
为什么const对象只能调用const成员函数,而不能调用非const成员函数?
参考:http://www.cnblogs.com/cplinux/articles/5553716.html 在c++中,我们可以用const来定义一个const对象,const对象是不可以调用类中的非const成员函数,这是为什么呢?下面是我总结的一些原理。 假设有一个类,名字为test代码如下:   1 class test{ 2   int i; 3 pub
C语言 const 指针使用技巧之——返回指针的函数
Author: Driver Monkey qq: 196568501 引言——      在c语言中,有些函数回返回指针,即为返回指针的函数。通常情况下函数的实现方不希望函数的调用方修改指针指向的内容。 解决方案——      在函数返回的时候返回一个指向 const 变量的指针。示例代码如下    #include "stdafx.h" static const int* te
函数返回的临时对象为const类型,const引用
#include #include     using namespace std; class A { public: A(){ m_Int = 10; } public: int m_Int; }; A GetInt() { A a; return a; } int Test( const A& pA ) { cout re
C++的const类成员函数(解释为什么非const成员函数不能访问const对象的数据成员)
1. 在C++中只有被声明为const的成员函数才能被一个const类对象调用。如果要声明一个const类型的类成员函数,只需要在成员函数列表后加上关键字const, 例如: class Screen { public: char get() const; };在类体之外定义const成员函数时,还必须加上const关键字,例如: char Screen :: get() c
深刻理解引用、const引用、右值引用的本质
一文看懂引用、const引用、右值引用
输入型参数(const)与输出型参数
4.3.10.2、函数传参中使用const指针 (1)const一般用在函数参数列表中,用法是const int *p;(意义是指针变量p本身可变的,而p所指向的变量是不可变的)。 (2)const用来修饰指针做函数传参,作用就在于声明在函数内部不会改变这个指针所指向的内容,所以给该函数传一个不可改变的指针(char *p = "linux";这种)不会触发错误;而一个未声明为const的指针
函数重载之const
我们知道,如果函数名相同,在相同的作用域内,其参数类型、参数个数,参数顺序不同等能构成函数重载。有趣的是如果同时在类中,对于函数名相同的const函数和非const函数能够构成重载,同时它们被调用的时机为:如果定义的对象是常对象,则调用的是const成员函数,如果定义的对象是非常对象,则调用重载的非const成员函数。例如: #include  using namespace std; cl
关于const常量、const指针以及const引用
这篇博客从头到尾的讲一下关于const的一些问题。 1.const常量 与变量不同,有const修饰的量是常量,常量的值不可改变,在定义的时候必须初始化,使用未初始化的常量是错误的。以前还经常弄不清楚的问题就是常量和变量的赋值问题,例如如下代码: int a=3; const int b=a;a是一个变量,而b是常量,能否用一个变量给常量赋值呢?答案是可以的,变量在这里只起到赋值的作用,而常
C++中,经常有同名成员函数,一个const形式一个非const形式的解读
C++中,我们经常看到STL有同名成员函数,一个const形式一个非const形式的,而且实现都是完全相同的,为什么呢?我们简单来分析一下,看看下面的代码,来源于C++中STL string class的片段: reference at(size_type _Off) { // subscript mutable sequence with checking if (this->_Mysiz
C++中const成员函数和非const成员函数的重载
函数重载 函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载。注意函数重载不能基于不同的返回值类型进行重载。 注意函数重载中的“形参表”不同,是指本质不同,不要被一些表象迷惑。main函数不能被重载。 下面三组定义本质是相同的,不是重载: 1)int sum (int &a); 和 int sum (int &); 2)  int sum (in