繁体   English   中英

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

[英]What does ampersand mean here?

&下面看起来是一个新功能(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;
}

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

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

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

但是,如果你在一个(可能是假设的)平台上,其中short小于int ,同时int是最小的正常可寻址单元,它实际上会完全不同。 原因是在这种情况下, short*必须存储一个地址( int以及int内的short偏移量。 因此, sizeof(int*) < sizeof(short*) 请注意,有一些实际的体系结构,其中sizeof(int*) < sizeof(char*)正是出于这个原因,所以它并非如此牵强。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM