BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #84726同步于 2014/12/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

请教一个关于c++primer上538页的const转换的问题,是不是书中说

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