【发布时间】:2021-03-15 13:43:30
【问题描述】:
给定以下代码:
template<class S, class T>
class node {
public:
S key;
T value;
node<S, T> *right_node, *left_node, *parent_node, *nearest_right_node, *nearest_left_node;
int height;
public:
template<typename, typename> friend
class avl_tree;
node() = default;
node(const S *key, const T *value, node<S, T> *right_node = nullptr, node<S, T> *left_node = nullptr,
node<S, T> *parent_node = nullptr, node<S, T> *nearest_right_node = nullptr,
node<S, T> *nearest_left_node = nullptr) : key(*key),
value(*value),
right_node(right_node),
left_node(left_node),
parent_node(parent_node),
nearest_right_node(nearest_right_node),
nearest_left_node(nearest_left_node),
height(0) {
}
~node() = default;
};
我可以用引用替换 c'tor 中 value 和 key 的指针,并且仍然可以给 key 和 value 一个 nullptr 值吗? (例如,如果 S 是 int*)?
更新:
int* x;
void update_x(int &new_x)
{
x=new_x;
}
我可以打电话给update_x(null_ptr)
【问题讨论】:
-
您现在传递给构造函数的
key和value指针已经 不能为空。如果是,您无论如何都会取消引用它们并获得未定义的行为。 -
你知道引用和指针的区别吗?这不是语言的一个不起眼的角落,它的肉和土豆。我认为您可以从good C++ book 中受益。
-
key(*key)这总是错的,没有如果或但是。 -
更新完全无效。它不会编译。您不能以任何方式、形状或形式使用它。
-
@n.'pronouns'm。为什么你说它总是错的?除非参数
key是nullptr,否则没问题。 “错误”是指代码无法通过审核,我同意
标签: c++ class pointers generics reference