如何实现C ++强制转换?

时间:2012-07-17 19:36:51

标签: c++ casting

C ++强制转换static_castconst_castreinterpret_cast具有类似模板的语法,例如:

long foo = 3; 
int bar = static_cast<int>(foo);

我看过标准版,它说演员表是表达式,而不是我想的模板函数。

这让我想知道:在幕后,这些演员阵容只是具有特权状态的模板,还是那些碰巧借用模板语法的关键字?

1 个答案:

答案 0 :(得分:16)

  

他们是否正好借用模板语法?

此。根据使用的上下文,强制转换的实现方式不同 - 通常,不能实现为函数。例如,static_cast有时只是一个编译时操作,不会为它发出代码。但有时(特别是在调用构造函数,在类型层次结构中进行转换或在布局不兼容的基元类型之间进行转换时),它需要运行时操作。

也就是说,您可以实现自己的类似于标准强制语法的函数(boost::lexical_cast就是这样做的。)