gpt4 book ai didi

c++ - 从 C++ 方法返回未定义的值

转载 作者:太空宇宙 更新时间:2023-11-04 15:58:59 24 4
gpt4 key购买 nike

我有一个类的形式

template <typename T>
class c {

bool hasChild = *something*;
T *child;

public:

T getChild() {
if(hasChild) {
return *child;
} else {
return 0; // <<-- this line
}

}

我的实际类(class)非常不同,但这更简单地代表了我遇到的具体问题。当 hasChild 为 false 时,getChild 返回一个未定义的值。然而,由于 c++ 没有像 Java 和其他语言那样的 NULL 值,我不确定我可以返回什么,因为我没有其他对类型 T 的对象的引用,并且由于它是一个模板而无法构造一个。根据 API 的要求,方法 method 必须返回类型 T 的对象,因此按照其他堆栈溢出帖子的建议更改方法签名以返回 T* 不是一个选项。

谢谢!

最佳答案

通常,您可以使用 std::optional 来解决这个问题(std::experimental::optional 如果不是 C++17),表明 c 可能有也可能没有 child 。请注意,如果您要返回 T*,只需返回 nullptr 即可。两者都需要更改函数签名,您说过这是不允许的。

这真的只留给你两个选择:

  1. 抛出一个exception如果找不到 child
  2. 返回一个新构造的T, as @elinx highlights in the comments

you've stated that it's undefined to not have a child你可能应该抛出一个异常。调用者有责任确保对象在调用 getChild 之前有一个子对象。如果您只是返回一个 T(),调用者可能不会意识到没有 child 。

关于c++ - 从 C++ 方法返回未定义的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49041761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com