Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;鉴定转换-常数和模板 在下面的代码中,我试图找出编译器(MSDEV C++ 2010和COMMO)为什么不考虑非专用模板获取函数返回类型为const的原因。我希望CASE#2(参见代码snipet)不会编译,但它确实编译了。有什么想法或联系吗_C++ - Fatal编程技术网

C++;鉴定转换-常数和模板 在下面的代码中,我试图找出编译器(MSDEV C++ 2010和COMMO)为什么不考虑非专用模板获取函数返回类型为const的原因。我希望CASE#2(参见代码snipet)不会编译,但它确实编译了。有什么想法或联系吗

C++;鉴定转换-常数和模板 在下面的代码中,我试图找出编译器(MSDEV C++ 2010和COMMO)为什么不考虑非专用模板获取函数返回类型为const的原因。我希望CASE#2(参见代码snipet)不会编译,但它确实编译了。有什么想法或联系吗,c++,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) {}

谢谢你,雷古

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;
};
模板
结构常数
{
T值;
常量():值(0){}
const T&get(){return value;}
};
模板
结构常数
{
T*常数值;
常量():值(0){}
const T*const&get(){return value;}
};
int main(int argc,const char*argv[]
{
//使用专门的
常数wconstance;
const_cast(wconstance.value)=新的双精度(1);
*wconstance.get()=12.0;//不编译CASE#1
//使用非专业
常数wConstness2;
const_cast(wConstness2.value)=新的双精度(1);
*wConstness2.get()=12.0;//编译CASE#2,允许修改
//wConstness2.value指向的值
返回0;
};

使用
T
=
double*const
(指向非const-qualified
double
的const-qualified指针)实例化
constness

const T&get()
中,
const
应用于整个
T
。如果
T
int*
,那么
const T
将是
int*const
,而不是
const int*
。因此,在您的特定情况下,
const
无效,因为
T
已经是const限定的(它是一个
双*const


当您有一个像
T
这样的类型名时,无论类型是什么,向类型名添加
const
volatile
总是在顶层应用。因此,
const T
T const
总是相同的,不管
T
是什么。

const\u cast(wConstness2.value)=新的双精度(1)
错误:强制转换的目标类型需要是
double*&
,以便有一个可分配给.doh!的左值。。。太晚了:D谢谢你的解释,不幸的是,这意味着我的设计无法工作:D