在 C++ 中,引用限定符是否表示一种子类型化形式?
In C++, do ref-qualifiers express a form of subtyping?
从编程语言理论的角度来看,在 C++ 中,像 const
和 volatile
这样的限定符允许表达一种子类型化形式,例如 int
是 [= 的子类型13=].
我想知道我们是否也可以考虑 ref-qualifiers &
和 &&
是否允许表达某种形式的子类型。换句话说,从编程语言理论的角度来看,我们是否可以认为 T
、T&
和 T&&
是否通过子类型关系相关?如果是这样,这种关系是什么?
int
being a subtype of const int
嗯,不太清楚你在问什么,但似乎完全相反,因为其他形式的 subtyping int
使用const
或 volatile
将添加比原始(值)类型更多的约束。
虽然在某些定义下您可以认为 CV 限定符是 "subtypes",但参考文献不是。 const T t = some_t;
创建一个 T
类型的新对象,声明为 const
。您可能认为它是创建一个新的 const T
,但无论哪种方式,您都在创建一个新对象,其值在概念上是现有对象的副本。
T &t = some_t;
不创建新对象。它为现有对象创建 reference。这在 C++ 中是一种根本不同的东西。引用不是对象;语言对此非常清楚。将引用视为 "subtype".
没有任何用处
从编程语言理论的角度来看,在 C++ 中,像 const
和 volatile
这样的限定符允许表达一种子类型化形式,例如 int
是 [= 的子类型13=].
我想知道我们是否也可以考虑 ref-qualifiers &
和 &&
是否允许表达某种形式的子类型。换句话说,从编程语言理论的角度来看,我们是否可以认为 T
、T&
和 T&&
是否通过子类型关系相关?如果是这样,这种关系是什么?
int
being a subtype ofconst int
嗯,不太清楚你在问什么,但似乎完全相反,因为其他形式的 subtyping int
使用const
或 volatile
将添加比原始(值)类型更多的约束。
虽然在某些定义下您可以认为 CV 限定符是 "subtypes",但参考文献不是。 const T t = some_t;
创建一个 T
类型的新对象,声明为 const
。您可能认为它是创建一个新的 const T
,但无论哪种方式,您都在创建一个新对象,其值在概念上是现有对象的副本。
T &t = some_t;
不创建新对象。它为现有对象创建 reference。这在 C++ 中是一种根本不同的东西。引用不是对象;语言对此非常清楚。将引用视为 "subtype".