Google在其C ++代码库中不使用异常。对于错误,它们使用一个名为status的类,而不是程序员从函数返回时必须检查的类。否则程序无法编译(在41:34链接https://www.youtube.com/watch?v=NOCElcMcFik)。我有几个问题:
1)网上是否有免费提供该课程的例子?
2)对于“void f()”,可以使用你变成“状态f()”的副作用。但是如果你的函数已经返回一个值怎么办? Google不允许传递非const的引用,因此您无法改变提供给您的Status对象。那他们怎么做?
感谢您的帮助。
答案 0 :(得分:4)
输入参数通常是值或const引用,而输出和输出/输出参数将是非常量指针。
正如讲师所说,谷歌使用专有的内部编译器,当Status
未被检查时,该编译器已被操纵以抛出错误。
答案 1 :(得分:0)
1)与之前提到的一样,您需要使用自定义工具来强制执行此类规则。这些可能是代码分析规则,可以设置为在失败时引发错误。
2)有很多方法可以在C ++中返回多个值。您可以返回一个对,其中一个项是您关心的值,另一个是状态对象。 C ++ 11还引入了元组以获得更多的返回值。您甚至可以编写自己的对象,其中包含您可能需要的所有返回信息,但在许多情况下,这可能会导致过度杀伤。
最有可能的是,Google会让你传入指针而不是非const引用。我相信他们更喜欢这种风格,因为它强制调用者传入一个对象的地址,因此更明确的是使用对象的“引用”并且可以修改该对象。
// let's a code reviewer know
// that a's address is used and might be modified
f(&a)
// requires the code reviewer to know
// the function signature to determine
// if the a is passed by value,
// const reference, or non-const reference
f(a)