删除模板化函数中的常量

Blo*_*aRd 3 c++ templates const const-cast c++11

删除使用模板化函数的常量我有一点问题.

#include <iostream>
using namespace std;

template< typename T>
void fct(T&  param)
{
  const_cast<T>(param) = 40;    
}


int _tmain(int argc, _TCHAR* argv[])
{
  int x = 30;
  const int  cx = x;
  const int& rx = x;
  fct(cx);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:

错误C2440:'const_cast':无法从'int'转换为'int'

我怎么能用const_cast到我的功能.

San*_*dro 6

你可以尝试做这样的事情:

template< typename T>
void fct(const T&  param)
{
  const_cast<T&>(param) = 40;    
}
Run Code Online (Sandbox Code Playgroud)

模板类型T必须是引用,否则您的演员表没有任何意义

  • 通过非const访问路径修改const对象是UB (3认同)
  • 除了入门目标不好之外,我更喜欢这个答案,因为它的简单性.不需要类型特征,让te编译器通过明确指定它来取出推导类型的`const`.当然,不同的版本不完全相同:这一个绑定到右值,另一个不绑定.根据您的要求,可以是pro或con. (2认同)