//昨天寫了一個模板類,發現定義為字符陣列后參考也是合法的,覺得很奇怪,然后寫了一個普通類發現參考果然是不合法的,代碼簡化如下:
template<class T >
class test
{
public:
test(const T &a)
{
}
};
class test1
{
public:
test1(const char * &a)
{}
};
int main()
{
test<char *> *t=new test<char *>("fun");//合法
test1 *t1=new test1("fun");//非法
return 0;
}
//想不明白為什么,剛接觸模板類,請多指教
uj5u.com熱心網友回復:
我覺得有可能是因為const沒有修飾到&的原因,如果你先定義一個別名:typedef char *PChar;
然后是test1(const PChar &a);
不知道這樣行不行?
uj5u.com熱心網友回復:
如果test<char *> *t=new test<const char *>("fun");就是非法的uj5u.com熱心網友回復:
我覺得這個非法的原因是前面t指標是指向接收非常變數的類的指標,而后邊new出來是指向接收常變數的類的指標,編譯器認為這不是一種指標才報的錯吧?uj5u.com熱心網友回復:
對,這樣就可以了,但關于是不是const沒有修飾到&的問題,我又寫了一個類class test2
{
public:
test2(char * &a)
{}
};
test2 *t2=new test2(const_cast<char *>("fun"));
依然是報錯呀,那到底是什么原因呢?而且我記得C++里面陣列直接參考就是違法的吧
uj5u.com熱心網友回復:
看起來不是const修飾不能使用串字面值作為參考型別,test(const T &a)把這里的const去掉也是通不過的轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27614.html
標籤:基礎類
