返回信息流请教一个关于c++primer上538页的const转换的问题,是不是书中说错了还是我理解错了。为什么下面两个调用都是一个是非const型的一个是const型的实参,为什么string型的就对了,而指针型的就错了,请大神解答
这是一条镜像帖。来源:北邮人论坛 / cpp / #84726同步于 2014/12/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教一个关于c++primer上538页的const转换的问题,是不是书中说
lfny
2014/12/13镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
追问一个非常重要的问题,也是困扰我很长时间的问题,解决了它,我能弄通很多问题,
template<typename T> int compare(const T& ,const T&)
{
cout<<"const模板函数"<<endl;
return 0;
}
char ch_arr1[] = "world",ch_arr2[] = "hi";
char *p1 = ch_arr1,*p2 = ch_arr2;
const char const_arr1[] = "make",const_arr2[] = "love";
const char *cp1 = const_arr1,*cp2 = const_arr2;
函数调用:
compare(p1,p2);
compare(cp1,p2);
请问这两个调用过程中实参推断的时候绑定的T是一样的吗?还是第一个推断的T是char*,第二个T是 const char *的?就是实参推断中T包含不包含const?还请说明白谢谢
【 在 xiaobing307 的大作中提到: 】
: 应该是常量指针与指针常量的问题
: 改成int* const m2 = &y就能编译通过
: 模板匹配时,const T&中的T绑定的是指针本身
模板参数T推断不能有歧义必须是相同的类型,同为char*或同为cinst char*
【 在 lfny (白色T恤) 的大作中提到: 】
: 追问一个非常重要的问题,也是困扰我很长时间的问题,解决了它,我能弄通很多问题,
: template<typename T> int compare(const T& ,const T&)
: {
: ...................
通过『我邮2.0』发布
能稍微说得清楚点吗?到底T包含不包含const?
【 在 renwotao 的大作中提到: 】
: 模板参数T推断不能有歧义必须是相同的类型,同为char*或同为cinst char*
: 通过『我邮2.0』发布
我认为是不一样的,虽然P1和CP1都是可变的,但是区别是前者当实参传进函数COMPaRe后,可以在函数内对P1指向的内容改变,但是后者就不行,所以两者是有区别的
【 在 lfny 的大作中提到: 】
: 追问一个非常重要的问题,也是困扰我很长时间的问题,解决了它,我能弄通很多问题,
: template<typename T> int compare(const T& ,const T&)
: {
: ...................
来自「北邮人论坛手机版」
补充:虽然在你的例子中后者是不能改变的,但并不是因为字符串声明是常量,而是后来的常量指针的声明
【 在 dawudianfen 的大作中提到: 】
: 我认为是不一样的,虽然P1和CP1都是可变的,但是区别是前者当实参传进函数COMPaRe后,可以在函数内对P1指向的内容改变,但是后者就不行,所以两者是有区别的
: 来自「北邮人论坛手机版」
来自「北邮人论坛手机版」
T包不包含const要看你传入参数是不是包含const,如果第一个参数和第二个参数传入为相同类型比如char*,则T类型为char*,同理,传入const char*,则T为const char*
【 在 lfny (白色T恤) 的大作中提到: 】
: 能稍微说得清楚点吗?到底T包含不包含const?
通过『我邮2.0』发布
我也不太懂。。。
第二种不是错了么,都推断不出来,还管它有没有const干嘛
【 在 lfny 的大作中提到: 】
: 追问一个非常重要的问题,也是困扰我很长时间的问题,解决了它,我能弄通很多问题,
: template<typename T> int compare(const T& ,const T&)
: {
: ...................