这个问题有点主观,但我相信它可能会带来一些建设性的答案。假设我有 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>
是更短的代码。
一种方式比另一种更安全吗?
答案 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?