Java 引用和C++引用有什么区别
What's the difference between a Java reference and C++ reference
所以我一直在想(在阅读这个Java pdf时)。。。
我知道这可能看起来很傻,但为什么我不能在c++中做到这一点。
float &f = new float;
这不是说f的引用是新float的地址吗?
在Java中,我看到了类似于的东西
String s = new String("something")
CCD_ 1被称为字符串引用。
Java中的"引用"一词与C++中的含义相同吗?
Java引用更接近C++指针,而不是C++references。在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中,当您声明String s时,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
C++中指针和引用之间的另一个重要区别是,指针可以指向真实对象,也可以等于null。根据定义,C++中的引用总是指向真实对象或变量。当你声明它时,你必须将它分配给真实的东西。
为了回答您的问题,对于最佳实践,只使用new或malloc运算符来分配空间。假设你是指针的新手,指针和引用之间的最大区别是你必须使用显式运算符*运算符来取消引用指针,但你不能使用运算符来取消对引用的引用。
Java参数接近C++引用。例如;
- 当您传递一个对象时,实际上您传递的是一个引用值。因此,所有对象都是Java中的引用
- 另一方面,Java通过值传递方法
您也可以查看此链接。
在java引用中,可以多次引用值或方法。但是在c++中,在一个引用变量中只能引用一个值。因此,在java中,引用变量更有可能是c++的指针。此外,java自动运行垃圾回收器,因此没有使用c++中用于释放内存的delete键。
- 什么时候在C++中返回常量引用是个好主意
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 在C++17中,引用const字符串的语义应该是什么
- 引用文件的适当方法是什么?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 引用 std::any 或 not_yet_in_std::whatever 的惯用方式是什么?
- 在 Rust 中,指针和引用有什么区别?
- 为什么或在什么情况下,你会将参数作为C++中的引用(或指针)传递给函数?
- 获取通用/前向引用地址有什么意义?
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 普通的右值引用和 std::forward 返回的引用有什么区别?
- 通过引用函数传递指针参数是什么意思?
- C++ 中的引用范围是什么?
- 将引用绑定到指针的语法是什么?(各种)
- constexpr引用有什么用吗
- 对struct::struct的未定义引用是什么意思
- 什么是常量指针常量引用类型的参数?(const X* const & p)