ami*_*cht 15 c++ oop pointers reference
这是来自OOP高级课程考试的问题,用C++教授(在TAU大学,本学期):
问:C++指针和引用有什么区别?
A. A reference is the entire object while a pointer is only the address of it. B. The same meaning, and difference is only in syntax and usage. C. The syntax used to access the object. D. Pointers are simple address to the object while a reference uses the virtual table.
哪个是正确的答案?
课程老师声称A是正确的,并且对象的引用实际上是对象本身.那是对的吗?我意识到访问引用等同于访问对象本身,但是,在破坏引用时,我们不会破坏对象本身.引用是对象的替代名称,但是说reference == object true?
顺便说一句,讲师给了一个faq的以下链接作为对他的主张的支持,引用:
"重要提示:尽管引用通常是使用底层汇编语言中的地址实现的,但请不要将引用视为指向对象的滑稽指针.引用是对象.它不是指向对象的指针,也不是对象的副本.这是对象."
但是,我认为这是不正确的.
Pet*_*der 37
他们都错了.
甲参考本质上是另一对象的同义词.在内部,它通常被实现为指针,但它的语法就像它引用的对象一样.
甲指针是一个单独的对象,其存储它指向的对象的存储器地址(或0,如果它不指向对象).
你可以说引用是它引用的对象(它当然就是这样),但事实并非如此.如果引用超出范围,则它引用的对象不会被破坏,因此引用不是对象.
引用和对象之间存在区别 - 您可以对同一对象进行多次引用.对象具有"标识",而引用本身并不是真实的.
虽然引用的机制与指针的机制完全不同,但我从概念上说,引用实际上与指针非常相似.
(B)是最接近的,但仍然不完全正确.引用是const指针的语法糖.就像一个const指针一样,它必须在初始化时绑定到左值,并且永远不会被反弹.就像一个const指针,它是多态的.
编辑:(A)不正确的简短证明,因为至少有几个人在为它辩护:
struct A { int x; int f() { return 1; } }
struct B : public A { int y; int f() { return 2; } }
B b;
A& a = b;
assert(sizeof(a) == sizeof(b)); // fail
assert(a.f() == b.f()); // fail again
Run Code Online (Sandbox Code Playgroud)