【发布时间】:2021-12-18 06:03:30
【问题描述】:
struct Node
{
int value;
Node* left;
Node* right;
Node(int i = 0) :value(i), left(nullptr), right(nullptr) {}
};
auto left = &Node::left;
auto right = &Node::right;
int main()
{
Node* root = new Node(0);
std::cout << typeid(left).name() << std::endl;
std::cout << left << std::endl;
std::cout << typeid(root->left).name() << std::endl;
std::cout << root->left << std::endl;
}
第一个问题:“auto left = &Node::left”是什么意思?类节点不被初始化一个对象,如何使用“Node::left”来赋值?
第二个问题:为什么打印“left”的输出是1?
【问题讨论】:
-
您可以使用
auto声明一个变量,其中初始化表达式涉及模板、函数指针或成员指针。在上述情况下,您尝试分配结构节点的left成员的地址。我怀疑它甚至可以正常工作。 -
SO 不适合这个。在每一本“现代”C++ 书籍中都已经解释过了。请看一篇:The Definitive C++ Book Guide and List
-
auto 表示:让编译器推断出实际的类型。这真的可以帮助代码更具可读性和可维护性(可重构)。标准::向量
v; auto it = v.begin() 比 std::vector 更具可读性::iterator it = v.begin();