程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> const-c++ template<unsigned M,unsigned N>

const-c++ template<unsigned M,unsigned N>

編輯:編程綜合問答
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;會出錯

最佳回答:


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved