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;会出错
c++ template<unsigned M,unsigned N>
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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” 匹配本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥30 python代码,帮调试
- ¥15 #MATLAB仿真#车辆换道路径规划
- ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
- ¥15 数据可视化Python
- ¥15 要给毕业设计添加扫码登录的功能!!有偿
- ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
- ¥15 微信公众号自制会员卡没有收款渠道啊
- ¥100 Jenkins自动化部署—悬赏100元
- ¥15 关于#python#的问题:求帮写python代码
- ¥20 MATLAB画图图形出现上下震荡的线条