临时对象传递给non-const reference 参数是不允许的
来源:互联网 发布:c 和java的三大框架 编辑:程序博客网 时间:2024/05/16 09:42
什么是临时对象?
C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象.
通常出现在以下两种情况:
(1)为了使函数调用成功而进行隐式类型转换的时候。
//计算字符ch在字符串str中出现的次数 int countChar (const string& str, char ch); char buffer[]; char c; //调用上面的函数 countChar (buffer, c);
传值方式:
int countChar (string str, char ch); string buffer; char c; //参数通过传值方式传递 countChar (buffer, c);
传常量引用:
int countChar (string& str, char ch);
//声明一个将str中字符全部转化为大写 void toUpper (string& str); char buffer[] = "hazirguo"; toUpper(buffer); //error!!非const引用传递参数不能完成隐式转化
(2)当函数返回对象的时候。
const string strMerge (const string s1, const string s2);
大多时候是无法避免这样的临时变量产生的,但是现代编译器可以将这样的临时变量进行优化掉,这样的优化策略中,有个所谓的“返回值优化”,下一篇具体讲解。
总结:
临时对象有构造和析构的成本,影响程序的效率,因此尽可能地消除它们。而更为重要的是很快地发现什么地方会生成临时对象:
- 当我们看到一个reference-to-const参数时,极可能一个临时对象绑定到该参数上;
- 当我们看到函数返回一个对象时,就会产生临时对象。
- 临时对象传递给non-const reference 参数是不允许的
- 不允许为非const引用创建临时对象 (关于引用)
- c++ l临时对象是const
- 临时对象被const reference, 生命期延长
- 临时变量作为非const的引用进行参数传递引发的编译错误
- 已解决:函数重载 原因:临时变量不能作为非const的引用参数传递
- 作为函数参数的临时变量的引用必须是const的
- 作为函数参数的临时变量的引用必须是const的
- c++一般规定,编译器自行构造的临时对象一定是const的
- 为什么c++不允许将临时对象赋给非常量引用?
- 函数返回的临时对象为const类型,const引用
- java之给方法传递对象参数
- C++ 中临时对象 和 const 对象 的一个区别
- printf和wprintf、printf输出结束标识符、c++按值返回临时对象是否是const的实验
- Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)
- 在Java中方法参数的传递,对象是传递引用
- CRITICAL SKILL9.3:PassingObjects to Functions传递对象参数给函数(值传递和引用传递的探讨)
- java 18:给方法传递对象参数,对象数组
- UVA - 10763 Foreign Exchange(vector的使用)
- 泛型技巧系列:如何提供类型参数之间的转换
- 分组UITableVie
- 求符合条件的最大子串的长度
- ACE的线程
- 临时对象传递给non-const reference 参数是不允许的
- 修改pppd,提高openwrt中pppoe多拨成功率
- RegexKitLite in IOS5
- 完全卸载oracle11g步骤
- 关于nagios的一篇很不错的文章
- CentOS 6.3 切换桌面模式和命令行模式探索
- 从抽象谈起(三):AOP编程和ASP.NET MVC
- GSL曲线拟合2
- Java中的反射机制