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

模板种中const

2013-03-01 
模板类中const看到书中一个模板类的定义如下:templateclass T,int nclass arraytp{arraytp(){}explicit

模板类中const
看到书中一个模板类的定义如下:
template<class T,int n>
class arraytp
{
      arraytp(){};
      explicit arraytp(const T & v);
     virtual T &operator[](int i);
     virtual T operator[](int i)const;
};
-----------------------
请问virtual T &operator[](int i);
     virtual T operator[](int i)const;
有区别吗?这样定义的话调用时编译器怎么知道调用哪个额??书上没找到解释啊。。模板种中const class 类 模板
[解决办法]
已经是函数重载了,详情看链接:
http://blog.csdn.net/zlhy_/article/details/8442177
[解决办法]
从lz说的情况来看,两函数内代码相同只是巧合;原设计的意思可能是,当指定的[i]不存在时,允许virtual T &operator[](int i);新建一个;而virtual T operator[](int i) const;抛出out_of_range之类的异常或一个“空”值。
[解决办法]
 virtual T &operator[](int i);是让普通对象调用的,
 virtual T operator[](int i)const;是让const对象调用的。
这样,看你声明的是普通对象还是const对象,编译器就调用相应的函数。
至于返回值,
virtual T &operator[](int i);返回的是一个对象的引用,那么你可以对这个对象进行修改。
virtual T operator[](int i)const;是const对象调用的,假如也返回一个对象的引用,则const对象有可能被修改,岂不是与const对象的定义相悖?所以,返回一个临时对象,就不会对const对象造成影响。
主要考虑的就是返回的对象可能被修改的情况。

热点排行