gpt4 book ai didi

c++ - 特定的重载转换运算符

转载 作者:行者123 更新时间:2023-11-27 23:02:30 25 4
gpt4 key购买 nike

我正在盯着下面的代码片段,试图了解发生了什么,或者至少如何命名我看到的内容以便用谷歌搜索。

struct A {
A *m_ptr;
typedef A * (A::*T);
operator T() const {
return &A::m_ptr;
}
};

我发现 operator T() 是一个重载的转换运算符来类型 T,而类型 T 是一个 typedef 来表示 A*(A::*)。现在,

  • A::* 到底是什么?
  • 那和 A* 有什么区别?
  • return 语句中的 A:: 是什么意思?

最佳答案

what exactly is A::*?

它是指向A 成员的指针。类型类型 A* (A::*) 是指向 A* 类型的 A 成员的指针。

what's the difference between that and A*?

它是一个指向 A 类型对象的指针。

and what sense does the A:: in the return statement make?

&(A::m_ptr) 是指向对象的 m_ptr 成员的指针。


进一步探讨这个想法的示例程序:

#include <iostream>

struct A {
A *m_ptr1;
A *m_ptr2;
typedef A * (A::*T);
operator T() const {
return &A::m_ptr1;
}

A(int d) : data(d) {}
int data;
};

int main()
{
A::T ap1 = &A::m_ptr1;
A::T ap2 = &A::m_ptr2;

A a1(10);
A a2(20);

a1.*ap1 = &a1; // a1.m_ptr1 points to a1.
a1.*ap2 = &a2; // a1.m_ptr2 points to a2.

a2.*ap1 = &a2; // a2.m_ptr1 points to a2.
a2.*ap2 = &a1; // a2.m_ptr2 points to a1.

std::cout << "a1.data: " << a1.data << std::endl;
std::cout << "a1.m_ptr1->data: " << a1.m_ptr1->data << std::endl;
std::cout << "a1.m_ptr2->data: " << a1.m_ptr2->data << std::endl;

std::cout << "a2.data: " << a2.data << std::endl;
std::cout << "a2.m_ptr1->data: " << a2.m_ptr1->data << std::endl;
std::cout << "a2.m_ptr2->data: " << a2.m_ptr2->data << std::endl;
}

输出:

a1.data: 10
a1.m_ptr1->data: 10
a1.m_ptr2->data: 20
a2.data: 20
a2.m_ptr1->data: 20
a2.m_ptr2->data: 10

关于c++ - 特定的重载转换运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26365219/

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