如果我想将char提升为int,我应该使用static_cast <int>(char变量)还是+(char变量)?为什么?

时间:2015-05-26 03:52:21

标签: c++ static-cast unary-operator integer-promotion

这个问题有点主观,但我相信它可能会带来一些建设性的答案。假设我有 def menu_headers_tree tmp_menu_headers: nil tmp_menu_headers=menu_headers if tmp_menu_headers.nil? tmp=[] tmp_menu_headers.each_with_index do |mh,idx| puts mh.id tmp_obj={} tmp_obj[:name]=mh.name tmp_obj[:menu_headers]=[] tmp << tmp_obj if mh.children.count > 0 puts "THERE is A menu_headers" tmp[idx][:menu_headers]=menu_headers_tree tmp_menu_headers: mh.children else puts "there is no menu_headers" end end return tmp end 并且我想将其推广为积分,以便我可以访问它的数值。我应该选择哪种?为什么? char x;或一元算术运算符static_cast<int>

我自己的想法是使用+更明确和可读。但是,使用一元算术运算符static_cast<int>是更短的代码。

一种方式比另一种更安全吗?

1 个答案:

答案 0 :(得分:2)

IMO,使用static_cast有一个重要优势,即使它有点冗长:它允许您通过grep或任何其他文本搜索实用程序快速搜索代码以进行强制转换。在大型项目中,这可能会有所不同,因为否则C风格的强制转换经常在void f(double)等函数声明中被错误地匹配,其中(double)当然不是强制转换。

此外,static_cast非常清楚你的意图。使用+运算符对于不完全熟悉整数提升规则的人来说可能看起来很奇特(不可理解)。在&#34;安全&#34;,afaik,两者都同样好。

相关:What is the difference between static_cast<> and C style casting?