首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

模板学习-奇怪有关问题

2013-12-15 
模板学习-奇怪问题Listint listwhile (num--) {list.push_back(n++)}List自己实现的。当push_back的声

模板学习-奇怪问题

List<int> list;

while (num--) {
list.push_back(n++);
}


List自己实现的。
当push_back的
声明为:  List<T> & push_back(T & elem); 时,上面代码会 编译出错。
声明为: List<T> & push_back(const T & elem); 时,上面的代码就会正常执行。 
(n++导致的,如果是push_back(n)就都能执行。)

 为啥呢?
[解决办法]
我试了一下
#include <iostream>

using namespace std;
template<class T>
void fun(T&){}
int main()
{
    int i;
    fun(i);
    fun(i++); //由于i++这个表达式会产生一个临时对象,所以才要求以const T&的方式的引用,
    cout << "Hello world!" << endl;
    return 0;
}

[解决办法]
你可以体验下用++n和n++有什么不同。

n++产生的是临时对象,它是一个右值,只能用const或者C++11的右值引用来接收,左值引用需要引用对象有长期有效性,不然会有不可预测的结果,比如在使用时已被销毁的情况。++n在这里是可以的,因为这句返回的是一个有效的左值,而不是一个临时对象。

热点排行