免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2412 | 回复: 8
打印 上一主题 下一主题

看c++编程思想第七章常量中发现的一个困惑问题:临时变量是否是常量 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-05 15:54 |只看该作者 |倒序浏览
本帖最后由 wuliqingyt 于 2010-06-06 11:02 编辑

书中说 临时变量会自动成为常量。

class A
{
        int i;
public:
        A(){}
        ~A(){}
        void modify()
        {
                i++;
        }
};

A f()
{
        return A();
}

void f1(A& a)
{
}

int main()
{
        f().modify();//编译通过

        //f1(f()); 编译错误
        return 0;
}

如果临时变量是常量的话,modify()函数不是const函数,f().modify()调用应该不能通过编译才对,

如果临时变量不是常量的话,f1( f() )编译时却提示传递给f1的参数要为const型的

上面两种情况很像矛盾了

希望大虾知道的给指点一下

论坛徽章:
0
2 [报告]
发表于 2010-06-05 17:29 |只看该作者
书中说 临时变量会自动成为常量。
wuliqingyt 发表于 2010-06-05 15:54



    楼主展示一下哪本大da法里这么写的。变量在任何时候都不会变常量,哪怕 const char这种形式的临时量也只能叫常变量而不是常量。
常量在静态区,临时(常)变量在栈区或寄存器。

论坛徽章:
0
3 [报告]
发表于 2010-06-05 17:29 |只看该作者
临时变量不等同于常量,与常量相同之处是只能被const引用

论坛徽章:
0
4 [报告]
发表于 2010-06-05 17:33 |只看该作者
回复 3# tyc611

看了2楼回复,我不得不声明下,我上文中的“常量”指由const修饰的变量

论坛徽章:
0
5 [报告]
发表于 2010-06-06 10:50 |只看该作者
楼主展示一下哪本大da法里这么写的。变量在任何时候都不会变常量,哪怕 const char这种形式的临时 ...
没本 发表于 2010-06-05 17:29



c++编程思想 131页原文是这么写的 “这里有一个关于临时变量的情况: 他们自动的成为常量。

这里所的常量指的是常变量,是我没写清楚

主函数中的f().modify()调用编译没问题, f1(f())调用编译提示要f1()的参数与f()的返回值类型不匹配

所以对临时变量是不是常变量问题有点不解

论坛徽章:
0
6 [报告]
发表于 2010-06-06 10:58 |只看该作者
回复 3# tyc611


    三楼的意思是 临时变量其实还是普通类型变量,如果要对其引用的话只能用const型引用,是这个意思吗?

论坛徽章:
0
7 [报告]
发表于 2010-06-06 13:31 |只看该作者
回复 5# wuliqingyt


    是常变量,要修改也不是不行,只是要注意作用域,这么改改就能编译运行了。

f1(*const_cast<A*>(&(f())));

论坛徽章:
0
8 [报告]
发表于 2010-06-06 15:28 |只看该作者
回复 7# 没本



是这样的

不过那问题还是没整明白

论坛徽章:
0
9 [报告]
发表于 2010-06-06 16:24 |只看该作者
回复  tyc611


    三楼的意思是 临时变量其实还是普通类型变量,如果要对其引用的话只能用const型引用 ...
wuliqingyt 发表于 2010-06-06 10:58

你的理解基本差不多,但“临时变量其实还是普通类型变量”说法欠妥
临时变量不是const变量,也不是普通变量;对于临时变量,能够调用其非const成员函数,且只能被const引用


BTW,这里的讨论仅适用于C++98/03标准,不适用于C++0x
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP