“&”符号在这里意味着什么?

时间:2014-03-07 10:52:44

标签: c++ c++11

&下面看起来是一个新功能(c ++ 11?),而不仅仅是提取变量的地址,因为把它(&)放在不同的位置使得值t不同。这是什么意思?

// test_ampersand.cpp
int _tmain(int argc, _TCHAR* argv [])
{
    int a[10] = { 2, };
    int* p = a;

    int t = (int) *((short *&) p);
    // int t = (int) *((short *) &p);

    return 0;
}

2 个答案:

答案 0 :(得分:2)

short *&是对short指针的引用。这是简单的C ++。反正它并不是真的需要它,因为结果从未被用作左值 - 指针只是立即被取消引用为右值。

答案 1 :(得分:1)

这不是一个新功能,它只是一个参考 - 它正在向p引用short*。换句话说,你告诉编译器:“认为包含p的字节属于short*类型。” (这也意味着你可以像这样分配给他们,但这不适用于此)。

int*short*和一个到short* &的广告投放之间的差异取决于处理器架构。如果int*short*在内存中具有相同的表示,则没有区别。它只会改变指针给你的解除引用。

但是,如果您在short小于int的(可能是假设的)平台上,同时int是最小的正常可寻址单位,那么实际上会完全不同。原因是在这种情况下,short*必须存储int 的地址以及short内的int的偏移量{1}}。所以sizeof(int*) < sizeof(short*)就是这种情况。请注意,实际架构中sizeof(int*) < sizeof(char*)正是出于这个原因,所以它不是所以牵强附会。

在这种架构上,演员int* -> short*意味着“计算short*的表示,使其指向与原始int*相同的位置。”演员int* -> short*&意味着“将int*的表示解释为short*。”如果sizeof(int*) < sizeof(short*)在这样的平台上,那甚至可能是无效的代码。