在C++中,你可以使用几种方式,C风格的转换或C++转换.Bjarne Stroustrup和许多其他C++专家说,一个好的设计应该没有铸造.
你可以帮我在这里重新设计下面的代码来摆脱演员阵容吗?
void CProgressBar::SetPosition( int nPos ); //unable to change
void CSaveDialog::UpdatePosition( double dProgress )
{
double percentOfProgress = dProgress * 100;
m_pProgressBar->SetPosition( static_cast<int>( percentOfProgress ) );
}
Run Code Online (Sandbox Code Playgroud)
我可以修改UpdatePosition,但不能修改SetPosition.
我认为在算术中投射可以.应该真正避免的转换类型是在您自己的类层次结构中上下(或跨越).
另外,对于像这样的算术运算,你可能想要更加小心.你应该在施法之前ceil
或floor
之前申请int
.我不确定它是否完全决定了转换为int的方式.(即朝+ inf,朝-inf或朝零)