2012-11-08 133 views
4

this conference,斯科特迈耶斯开始说“左值通常是表达式,你可以采取的地址”。我一般强调这个词:什么是你不能接受的地位? (如果存在)。地址不能被接受是什么样的左值?

编辑: 请提供您的答案代码片段,它使事情更清晰。

+1

您是否在您的标题中指** ** lvalues **? –

+0

yea o.O不敢相信我写了右值 – qdii

+0

我没有进入完整的会议视频,但看看周围的文字我想S.M.这里真的是在讨论'rvalues'。关于你的问题,我发现的最相关的东西似乎可以在这里找到:(http://thbecker.net/articles/rvalue_references/section_05.html) –

回答

7

我认为bitfields满足你的条件...我相信f.x是一个左值,但你不能把它的地址。有趣的是,你也不能这样做auto & x = f.x

C++ 11第8.3.1节部分第4段组成:由于位字段(9.6)的地址不能采取,指针不能指向一个位字段。

struct foo { 
    int x : 3; 
    int y : 3; 
    int z : 3; 
}; 

int main() { 
    foo f; 

    f.x = 3; 
} 

我甚至不太确定这个其他的想法,但标准说,你不准使用的主要功能。如果采用main的地址来使用它,那么这也足够了。 C++ 11 3.6.1第5段


而从评论我离开了,我知道,TI延长他们的C和C++编译器,有一个名为cregister存储类,你不能拿的地址。 (因为它指的是一个没有地址概念的物理寄存器)。

+1

把东西的地址定义为“使用ODR”,所以我认为你对“main”是正确的。 – ildjarn

+0

@ildjarn无论如何,由于'main'不是一个左值,这里有趣吗? –

+0

@Konrad:'main'是一个函数,函数是左值。我在§3.6.1中看不到任何其他内容 - 我错过了什么? – ildjarn

0

您可以从命名符号(例如与临时实例)中获取地址。就我理解这个解释而言,这就是构成一个左值。

相关问题