[英]What's the difference between a Java reference and C++ reference
所以我一直在想(在阅读这篇Java pdf时)......
我知道这可能看起来很愚蠢,但为什么我不能在c ++中这样做。
float &f = new float;
这不是说f的引用是新浮点数的地址吗?
在Java中,我看到类似的东西
String s = new String("something")
String s
称为字符串引用。
Java中的“引用”一词与C ++中的含义是否相同?
Java引用更接近C ++ 指针而不是C ++ 引用 。 在Java中,您可以使用以下参考执行以下操作:
在C ++中,指针具有相同的属性。 因此,您在C ++中寻找的代码就像
float* f = new float;
这是完全合法的。 为了更好地比较,这个Java代码:
String myString = new String("This is a string!"); // Normally I wouldn't allocate a string here, but just for the parallel structure we will.
System.out.println(myString.length());
/* Reassign myString to point to a different string object. */
myString = new String("Here's another string!");
System.out.println(myString.length());
将映射到此C ++代码:
std::string* myString = new std::string("This is a string");
std::cout << myString->length() << std::endl;
delete myString; // No GC in C++!
/* Reassign myString to point to a different string object. */
myString = new std::string("Here's another string!");
std::cout << myString->length() << std::endl;
delete myString; // No GC in C++!
希望这可以帮助!
在java引用中,您可以多次引用值或方法。 但是在c ++中,您只能在一个引用变量中引用一个值。 所以在java中,引用变量更可能是c ++的指针。而且java自动运行垃圾收集器,所以没有使用在c ++中用来释放内存的delete键。
当您声明String时,在Java中没有,s不包含新String的地址,但是它的值在这种情况下是某种东西。
您可以查看this
文章,了解有关Java中变量地址位置的更多信息,这是毫无意义的。
在C ++中你使用指针,所以如果你有:
int foo = 0;
你可以有一个指针引用foo的地址:
int* bar = &foo;
这行代码说bar的值是foo的内存地址。 Java通过引用操作对象,每个对象都是引用,但它也会自动收集垃圾。 如果在C ++中使用new关键字,则需要自己清理内存:
float* f = new float(0); // Allocate memory
...
delete f; // Free memory
是的,我同意Joni,c ++指针在语法上更接近于Java中的引用。
C ++中指针和引用之间的另一个重要区别,指针可以指向真实对象,也可以等于null。 根据定义,C ++中的引用始终指向真实对象或变量。 在声明它时,您必须将它分配给真实的东西。
要回答您的问题,最佳实践仅使用new或malloc运算符来分配空间。 假设您是指针的新手,指针和引用之间的最大区别在于您必须使用显式运算符 - *运算符 - 来取消引用指针,但是您不使用运算符来取消引用引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.