是否允许在不同类型的const之间进行static_cast?

时间:2014-07-16 01:11:59

标签: c++

到目前为止,我很少见到顶级const之间的static_cast 最近我不得不使用static_cast来显示指向const对象的指针的地址,我提出了这个问题:
是否允许在不同类型的const之间进行static_cast?

它使用gcc 4.7传递编译。但我只是在这里要求确认它不是UB。感谢。

  const int a = 42; // test case 1, const obj
  const double b = static_cast<const double>(a);
  cout << b << endl;


  const int c = 0; // test case 2, pointer to const obj
  cout << static_cast<const void*>(&c) << endl;

1 个答案:

答案 0 :(得分:4)

来自[expr.static.cast]

  

[...] static_cast运算符不应抛弃constness

使用const 添加 static_cast完全没问题,然后再次在测试用例中不需要

const int a = 42; // test case 1, const obj
const double b = static_cast<double>(a); // Works just as well.
const double b = a; // Of course this is fine too

我想,您想要添加const static_cast的次数之一就是显式调用重载函数

void foo(int*) { }
void foo(int const*) { }

int main()
{
  int a = 42;

  foo(&a);
  foo(static_cast<int const*>(&a));
}

虽然使用设计合理的代码,但您不应该真的需要这样做。