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;會出錯
抱歉,引用和指針組合,確實有一些,令人困惑之處。
剛剛實驗一下,不一定每個編譯器都這樣,
字符串字面值,和指針,指針引用參數狀況:
const char *const 這個好理解
const char *const & 這個也好理解
const char *& ///抱歉,不能匹配,因為指針不是常量,所以這種指針的引用,不能匹配字符串字面值
const char * ///這個也好理解
char * & ///抱歉,不能匹配,因為指針不是常量,所以這種指針的引用,不能匹配字符串字面值
char * /// 可以匹配 ,兼容?
數組引用,和字符串字面值:
char(&)[6] 和“Hello” 不匹配 ,字符串字面值 是常量字符串,其每個元素都是常量。
const char (&)[6]; 和“Hello” 匹配