cor*_*zza -1 c++ types reference language-lawyer
据我所知,可以在原始类型可以使用的地方使用引用(我并不暗示反向是真的),唯一的区别是它们的变异语义(当变量用作左值时).
那么他们不会像原版那样符合资格吗?如果是这样,为什么某些东西是一个参考,存储在它的类型中?
编辑:如果引用是不同的类型,为什么它们可以在很多情况下替换原始类型,而无需显式转换?是否涉及隐式演员?
例:
void bar(int& a);
int x;
int& y = x;
bar(y) // matching type
bar(x) // what happened here? was x cast to a reference?
Run Code Online (Sandbox Code Playgroud)
参考是一个正式的类型; 或者至少你可以阅读C++标准本身中的"如果T是引用类型".
但是,您的问题完全合法,因为引用具有非常混乱的语义.他们不是很一流的类型(例如,你不能有一个引用到引用或指针到基准),在我看来这是因为C++管理混为一谈两种不同的类型与它如何定义和使用引用.
引用的真正含义是它为已存在的对象(值)提供了一个替代名称.这是什么意思?这意味着它不会"限定" 它所指的价值类型; 它更确定了用于引用该值的名称("变量","存储")本身.
在C++中,类型和值的语义通常取决于存储对象/值的存储的其他属性.这并不总是明确的,这就是让人困惑的东西.
我认为,因为C++在很大程度上依赖于暴露"存储"的概念(而不是将其隐藏为实现细节),所以应该有两种类型的系统:一种用于纯值本身,另一种用于存储,其中存储类型系统应该是值类型系统的超集.
出现非常类似问题的另一个例子是CV资格.这不是一个对象/值本身应该是const或volatile.它是包含该值的存储,可能是也可能不是可变的,并且可能需要或可能不需要保护其免受某些加载/存储优化的影响.同样,如果有一种方法可以在值和存储的情况下分别表达类型的这些属性,则可以更好地表达.
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |