gpt4 book ai didi

C++ 为什么对象的方法被 .通过引用但通过 -> 通过指针

转载 作者:行者123 更新时间:2023-11-28 06:02:22 25 4
gpt4 key购买 nike

<分区>

这是一个好奇的问题,我还没有找到好的答案。假设在“main.cc”中我有以下代码

namespace {

class MyClass {

public:
int GetNumber() const {return number_;}

MyClass(const int number) :
number_(number) {
}

private:
const int number_;

};

const MyClass* GetPointerToClass(const MyClass &c) {
return (&c);
}

} // namespace

int main(int argc, char* argv[]) {

const MyClass my_constant_class(5);

const MyClass* const pointer1_to_constant_class = GetPointerToClass(
my_constant_class);
printf("%d\n", pointer1_to_constant_class->GetNumber());

const MyClass* const pointer2_to_constant_class = &my_constant_class;
printf("%d\n", pointer2_to_constant_class->GetNumber());

const MyClass& reference_to_constant_class = my_constant_class;
printf("%d\n", reference_to_constant_class.GetNumber());

const MyClass copy_of_my_class = my_constant_class;
printf("%d\n", copy_of_my_class.GetNumber());

return 0;
}

现在当我运行程序时,它会打印:5个5个5个5

我很好奇的是程序为什么能编译运行成功?

特别是(根据我的理解,如果我错了请指正):

pointer1_to_constant_class 的值被分配给 const 引用的引用。

pointer2_to_constant_class 的值被分配给一个对象的引用。

(所以虽然两个指针属于同一类型,但是它们被赋值给了不同的类型)

reference_to_constant_class 的值被分配给一个对象。

copy_to_my_class 的值被分配给一个对象。

(因此引用和对象被分配给同一类型)

那么为什么我们要调用pointer2_to_constant_class->GetNumber,如果它被分配给一个对象的引用。

还有,为什么调用reference_to_constant_class.GetNumber()没有区别,与 copy_of_my_class.GetNumber() 相比,

如果一个是对象,另一个只是一个引用?

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