Kor*_*gay 1 c++ value-type reference-type
示例代码:
MyItemType a;
MyItemType b;
a.someNumber = 5;
b = a;
cout << a.someNumber << endl;
cout << b.someNumber << endl;
b.someNumber = 10;
cout << a.someNumber << endl;
cout << b.someNumber << endl;
Run Code Online (Sandbox Code Playgroud)
输出:
5
5
5
10
Run Code Online (Sandbox Code Playgroud)
如果a和b是引用类型,那么最后2行将是10和10而不是5和10我猜.
当你做这样的声明时,这是否意味着:
AClassType anInstance;
Run Code Online (Sandbox Code Playgroud)
它被视为一种价值类型?
------这是MyItemType.h ------------
#ifndef MYITEMTYPE_H
#define MYITEMTYPE_H
class MyItemType{
public:
int someNumber;
MyItemType();
};
MyItemType::MyItemType(){
}
#endif /* MYITEMTYPE_H */
Run Code Online (Sandbox Code Playgroud)
基本上,是的(如果你认为C++相当于与Java中的相同).
AClassType anInstance;是一个对象,而不是一个参考.MyItemType a并且
MyItemType b它们是不同的对象,它们驻留在不同的存储空间中,因此显然改变为一个不会影响另一个.
执行此操作时a=b,不会将一个对象引用另一个对象,但在这种情况下,请执行成员分配.这基本上就像说
a.someNumber = b.someNumber;
Run Code Online (Sandbox Code Playgroud)
它不被视为值类型,事实上它是。
虽然在 Java 对象变量中存储对对象的引用,但在 C++ 中,对象与其引用之间存在重要区别。默认情况下,分配实际上是按值进行的。
如果你想让一个变量只是一个引用,你可以使用引用或指针类型,这取决于你想用它做什么。这些类型被声明为T*和T&。
为了进一步说明这一点:
在 Java 中,当您说 时MyClass obj,创建了一个对象,但引用/指针存储在变量中obj。
在 C++ 中,MyClass obj创建对象并将其存储在obj. 如果要使用引用/指针,则需要将变量显式声明为MyClass* objPointer or MyClass& objReference。
| 归档时间: |
|
| 查看次数: |
5093 次 |
| 最近记录: |