代码非常复杂。实际上,您想测试getAssigment
方法是否成功以及分配的指针是否为非空。
代码测试,尽管以一种复杂的方式,利用弱类型,而不是试图接受显式性和 C++ 的强类型。因此,它不是惯用的 C++,而且比必要的更难理解。
特别是,不要!!a
在 C++ 中使用。在 JavaScript 等弱类型语言中,这是一个既定的习惯用法,用于将值强制转换为布尔类型。但在 C++ 中,这并不常用。
hasSolution
由于未定义或使用代码,因此尚不清楚代码的作用。但是,我怀疑代码应该等同于以下内容:
Assignment *a;
return getAssignment(query, a) and a == nullptr;
(在 C++11 之前,您需要编写0
而不是nullptr
.)
但是,这段代码仍然暴露了一个糟糕的设计:为什么是a
通过引用传递的?为什么不是返回值?更糟糕的a
是,从来没有使用过,所以没有必要。如果a
确实没有必要,则应完全省略。如果有必要,它应该是返回值。也就是说,原型getAssignment
应该是这样的:
Assignment* getAssignment(the_type_of_query query);
它应该简单地使用如下:
Assignment* a = getAssignment(query);
此外,我怀疑这段代码实际上将内存所有权分配给了原始指针a
。在现代 C++中强烈建议不要这样做。要么不使用指针,要么使用智能指针。