【发布时间】:2013-03-26 09:42:27
【问题描述】:
假设我们要创建一个函数来计算两条线的交点。交点并不总是被定义或唯一的。如何在函数的签名中体现这一点?
我想出了这些选项:
-
bool getIntersectionPoint ( Line& a, Line& b , Point& result );如果线平行,则返回 false。否则返回 true 并将结果写入变量。
-
Point getIntersectionPoint ( Line& a, Line& b );如果线平行,则抛出异常。
[更新]
如果我们创建两个函数bool doLinesIntersect(const Line&, const Line&); 和Point twoLinesIntersection(const Line&, const Line&);,第二个函数仍然可以在第一个返回false 后被调用。
【问题讨论】:
-
我非常怀疑你想为此抛出异常。
-
我认为抛出异常是错误的——因为两条线是平行的,因此没有交叉点不是“错误”,而是正常的结果。
-
没有“最好”的方法。两种方法都可能存在争论(特别是因为您没有提供上下文)。
-
确保您没有返回对本地点的引用!
-
如果您选择第一个解决方案(我更喜欢的那个),您的方法可能应该称为
calculateIntersectionPoint。还有第三种可能性:返回一个特殊值,表示不存在交集。在 Java 中,您可以只返回null。在 C++ 中,它可能是std::pair<bool,Point>(我不会在 C++ 中返回指针)。
标签: c++ function exception return return-value