对象 * X 和 C++ 中的 Object&X 有什么区别
what's the difference between object * x and object& x in c++
可能重复:
C++中指针变量和引用变量的区别
假设我试图将对对象x的引用传递给c++函数。。。
有什么区别
pass(Object * x){
}
和
pass(Object& x){
}
以及当使用不同的方法声明指针/引用时,您将如何访问实际对象本身。。。
例如,如果我有Object*x,我将如何实际访问x 引用的实际对象
与Object&x
第一个是pass-by-pointer。第二个是引用传递。
至于用法,指针必须先"取消引用"才能使用。这是用*
和->
操作符完成的:
void do_something(Object * x)
{
Object & ref = *x; // * returns a reference
ref.method();
x->method(); // same as (*x).method()
}
参考文献没有这样的限制:
void do_something(Object & x)
{
x.method();
}
然而,引用在其整个生命周期中只能指向单个对象,而指针可以更改目标,并且(如John在下面提到的(指向"无"(即NULL
、0
,或者在C++0x中为nullptr
(。在C++中没有NULL
引用这样的东西。
由于引用更容易使用,也不容易出错,所以除非你知道自己在做什么,否则最好使用它们(指针是一个非常困难的主题(。
通过引用意味着调用方应保证引用的对象有效。传递指针通常需要函数来检查指针是否为NULL。
传递引用也意味着函数不关心对象的生命周期。传递指针可能需要函数来销毁对象。
因此,很明显,传递引用具有清晰的语义、较少的可能性和较少的错误倾向。
相关文章:
- 根据标准,究竟什么是"declaration of an object"
- 当我们在 C++ 中说"initialize the object"时,它实际上意味着什么?
- C++ 中数组的"expression must have pointer-to-object type"是什么?
- (类 *对象;)和(object = new class();)之间有什么区别
- 对象Mat(args)之间的区别是什么——内存分配明智;Object*Mat=新Mat(args);在C++中
- "most derived object"是什么意思?
- "Objects are basic run-time entities in an object-oriented system"是什么意思?
- C++中的ruby“Object#freeze”对应程序是什么
- "error : a nonstatic member reference must be relative to a specific object"是什么意思?
- 当一个 ofstream object.open() 被注释掉时会发生什么
- Object obj = Object() 和 Object obj() 有什么区别?
- "reference can never be made to refer to another object"是什么意思?
- 什么是"a value not associated with an object"?
- 有人可以向我解释什么是"reference reseating",为什么"a reference to point(refer) to another object"不可能?
- 这句话"a class is an object even if not instantiated"是什么意思?
- <Object> 什么是无效初始化(处理<Object>导出)
- "object expression"在C++中意味着什么
- "clean object model"是什么意思?
- 在C++中,object和object()之间有什么区别
- 对象 * X 和 C++ 中的 Object&X 有什么区别