如何将 static_cast 转换为变量类型

lac*_*lan 2 c++ types casting c++11 c++14

如果我有一个已知类型的变量或成员,是否有一种方法可以静态转换为所述类型而无需明确说明类型?

因此,确保将来如果变量类型发生变化,只需重新编译即可。

一个非常基本的例子是:

int y = 5;
uint32_t x;
x = static_cast< TYPEOF( x ) >( foo );
Run Code Online (Sandbox Code Playgroud)

现在,如果在未来的某个时刻 x 需要更改为 int64_t 的话,如果只需要更改变量的声明而不是所有 static_cast 行(可能有很多行),那就太好了。

作为个人说明,我正在使用 g++ 6 进行编译,因此我能够使用 c++14 功能,尽管与其他版本兼容的答案可能会让其他人受益。

Ale*_*ang 8

只需使用decltype

x = static_cast<decltype(x)>(y);
Run Code Online (Sandbox Code Playgroud)


lac*_*lan 5

正如上面评论中所述,解决方案是

int y = 5;
uint32_t x;
x = static_cast< decltype( x ) >( y );
Run Code Online (Sandbox Code Playgroud)