如何以正式严谨的方式定义(解释)C ++中的引用类型?
我尝试过在Google上搜索,并查看了Stroustrup的《C ++编程语言》,但我没有在那里看到这个概念的定义。
{ // Block scope
Foo fooVal = makeFoo(); // Say makeFoo() returns a (temporary, unnamed) Foo
// Here the temporary Foo is dead (fooVal is a copy).
// Foo &fooRef = makeFoo(); // Error, reference is non-const
Foo const &fooCRef = makeFoo(); // All good
// ...
// The second temporary is still alive
fooCRef.doSomethingFunny(); // Works like a charm !
} // The second temporary dies with fooRef
请注意,有时可能会出现对象超出其作用域,但仍有引用指向它的情况。这时将会产生悬空引用,不再使用它们(这样做将导致未定义的行为)。
Foo *fooPtr = new Foo; // Here is a Foo
Foo &fooRef = *fooPtr; // Here is an alias for that Foo
delete fooPtr; // Here is the end of that Foo's life
fooRef.doSomethingFunny(); // Here comes trouble...
https://abseil.io/blog/20180531-regular-types
这是Titus Winters的一篇博客文章,他是C++子委员会负责C++标准库的主席。
据Titus Winters称,值类型和引用类型的区别在于复制行为。当您复制值类型的实例时,您得到两个独立的对象,它们一开始是相等的,但在其中一个修改后可能会有所不同。当您复制引用类型时,您得到两个对象,它们引用相同的数据。
引用类型不拥有它们的数据。一些引用类型允许修改所引用的数据(例如span),而一些不允许(例如string_view)。这两个示例都非常适用于函数参数传递。函数调用者通过惯例保证了引用类型的基础数据在函数调用期间不会被销毁(就像普通的C++引用一样)。
https://learn.microsoft.com/en-us/cpp/cpp/value-types-modern-cpp?view=vs-2019
微软文档将引用类型视为多态类型(具有至少一个虚函数或成员变量的类型),而将值类型视为非多态类型。(Bjarne Stroustrup 将非多态类型称为具体类型。)int & aref = a;
#include <stdio.h>
#include "stdafx.h"
int main()
{
int a=9;
int & aref = a;
a++;
cout << "The value of a is %i\n" << aref;
return 0;
}
还要记住:
引用必须始终指向某个对象,不允许为空。
在创建引用时必须初始化,未初始化的引用是不存在的。
一旦初始化后,引用就不能被改变指向其他变量。
如果有帮助请告诉我,谢谢。
std::is_reference
。 - πάντα ῥεῖis_reference
可以告诉你任何给定类型是否为引用。 - Mike Seymour