wppkind 2015-11-04 06:41 采纳率: 100%
浏览 3226
已采纳

c++ template<unsigned M,unsigned N>

template
int compare1(const char (&a)[M],const char (&b)[N]){
return strcmp(a,b);
}
int compare2(const char * const &a,const char * const &b){
return strcmp(a,b);
}
int compare3(const char &a,const char *&b){
return strcmp(a,b);
}
int compare4(char * const &a,char * const &b){
return strcmp(a,b);
}
compare1("hello","world"); //right
compare2("hello","world"); //right
compare3("hello","world"); //wrong
compare4("hello","world"); //wrong
compare3错误信息:invalid initialization of non-const reference of type ‘const char
&’ from an rvalue of type ‘const char*'
compare4错误信息:deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
我的疑惑:1.模板的const char (&a)[M],const char (&b)[N]这句话是什么意思
2.常量字符串如上面的hello和world只能用const char * const &类型来接收吗?为什么?
3.const char (&a)[M]和const char * const &有什么关系?为什么前者也可以用来接收常量字符串?
4.char ch = 'a';
char *p = &ch;
char *&pch1 = p; //right
char * const &pch2 = p; //right
const char *&pch3 = p; //wrong
const char * const &pch4 = p; //right
为什么const char *&pch3 = p;会出错

  • 写回答

11条回答 默认 最新

  • lm_whales 2015-11-06 07:17
    关注

    抱歉,引用和指针组合,确实有一些,令人困惑之处。
    刚刚实验一下,不一定每个编译器都这样,
    字符串字面值,和指针,指针引用参数状况:
    const char *const 这个好理解
    const char *const & 这个也好理解
    const char *& ///抱歉,不能匹配,因为指针不是常量,所以这种指针的引用,不能匹配字符串字面值
    const char * ///这个也好理解
    char * & ///抱歉,不能匹配,因为指针不是常量,所以这种指针的引用,不能匹配字符串字面值
    char * /// 可以匹配 ,兼容?
    数组引用,和字符串字面值:
    char(&)[6] 和“Hello” 不匹配 ,字符串字面值 是常量字符串,其每个元素都是常量。
    const char (&)[6]; 和“Hello” 匹配

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条