在下面的代码中,我试图找出为什么编译器(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