【发布时间】:2011-08-20 22:07:53
【问题描述】:
最初是this question 的主题,后来发现 OP 只是忽略了取消引用。同时,this answer 让我和其他一些人开始思考 - 为什么允许使用 C 样式转换或reinterpret_cast 将指针转换为指向引用?
int main() {
char c = 'A';
char* pc = &c;
char& c1 = (char&)pc;
char& c2 = reinterpret_cast<char&>(pc);
}
上面的代码在 Visual Studio 上编译时没有任何警告或错误(关于演员表),而 GCC 只会给你一个警告,如 here 所示。
我的第一个想法是指针以某种方式自动被取消引用(我通常使用 MSVC,所以我没有收到 GCC 显示的警告),并尝试了以下操作:
#include <iostream>
int main() {
char c = 'A';
char* pc = &c;
char& c1 = (char&)pc;
std::cout << *pc << "\n";
c1 = 'B';
std::cout << *pc << "\n";
}
here 显示了非常有趣的输出。因此,您似乎正在访问指向的变量,但与此同时,您却没有。
想法?解释?标准引号?
【问题讨论】:
标签: c++ pointers casting reference