在下面的代碼中,我試圖找出爲什麼編譯器(msdev C++ 2010和Comeau)不認爲非專用模板get函數的返回類型是const。我希望CASE#2(請參閱code snipet)不能編譯,但它確實如此。任何想法或鏈接?C++鑑定轉換 - 常量和模板
謝謝,單組
template < typename T >
struct constness
{
T value;
constness() : value(0) {}
const T &get() { return value; }
};
template < typename T >
struct constness< T * >
{
T * const value;
constness() : value(0) {}
const T * const &get() { return value; }
};
int main(int argc, const char* argv[])
{
// Uses specialized
constness< double * > wConstness;
const_cast< double * & >(wConstness.value) = new double(1);
*wConstness.get() = 12.0; // CASE #1 doesn't compile
// Uses non specialized
constness< double * const > wConstness2;
const_cast< double * & >(wConstness2.value) = new double(1);
*wConstness2.get() = 12.0; // CASE #2 compiles, allowing modification of
// value pointed by wConstness2.value
return 0;
};
'const_cast < double * >(wConstness2.value)= new double(1);'是錯誤的:目標類型的轉換需要是'double *&'以便有一個左值,您可以將其賦值。 – 2011-04-25 04:59:18
doh! ...在這裏得到太晚:D – regu 2011-04-25 05:01:47