自从我第一次实现List类以来,这个问题一直困扰着我,在那里我需要一种方法来查找数据等于输入值的节点。如果==,那么显然可以立即返回。然而在其他方面?那应该怎么办?
我考虑过引发异常,但是当程序从函数调用中识别出故障时会如何表现?
line = 'Here is my code and output below, i would like to have it so that instead of saying how many occurrences, it would output the number of times the letter appears in asterisk form.'
h = Hash.new(0)
line.downcase.each_char{ |ch| h[ch] += 1 if ('a'..'z').include? ch }
h.to_a.sort_by(&:last).reverse.each { |ch, count| puts "#{ch}: " + "*" * count}
好吧,我有点期望如果搜索成功,它会返回一个指向节点的指针,因此如果需要,我可以在函数调用中访问它的值。
答案 0 :(得分:1)
nullptr
是搜索失败时的正确返回值。这是使用指针而不是引用的优势,因为如果您知道自己将始终拥有一个值,则可以返回引用。
当从函数调用中收到指针时,调用代码应始终检查nullptr
,并处理搜索失败的事实。
F.60中的C++ Core Guidelines状态:
当“无参数”是有效选项时,将T *优先于T&
指针(T *)可以是nullptr,而引用(T&)不能,没有有效的“空引用”。有时使用nullptr代替指示的“无对象”很有用,但是如果没有用,则引用在符号上会更简单,并且可能会产生更好的代码。
答案 1 :(得分:0)
有许多处理这种情况的常用方法。正确的选择很大程度上取决于您要返回的是什么类型的东西。
foo &
更改为optional<foo &>
。另一个方法是定义一个“空”对象,并在失败时返回对该对象的引用。