问题标签 [lvalue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 标准在哪里说 ::delete 可以更改左值?
我遇到了我的第一个编译器,它更改了传递给 ::delete 的左值,但没有将左值清零。即以下情况属实:
请注意,删除操作后 p 不为零,并且它已从旧值更改。一位同事告诉我,在他使用一些将 p 更改为 0xFFFFFFFF 的大型机 C++ 编译器以及将 p 更改为 0 的其他编译器的经验中,这并不罕见。
C++ 标准中的什么地方说允许编译器执行此操作?
通过StackOverflow搜索,我发现了这个问题:为什么不删除将指针设置为NULL?其中有一个答案提到了Bjarne Stroustrup 的回应,其中包括以下声明:
C++ 明确允许删除的实现将左值操作数清零,我曾希望实现能够做到这一点,但这个想法似乎并没有在实现者中流行。
我已经阅读并重新阅读了最终委员会草案 C++0x 标准的第 5.3.5 和 12.5 节,但我没有看到“显式”部分。我只是在查看标准的错误部分吗?或者这些部分是否存在逻辑链,但我只是没有正确连接在一起。
我不再拥有 Annotated C++ Reference Manual 的副本。编译器可以在ARM中执行此操作吗?
[编辑:将部分参考从 3.5.3 更正为 5.3.5。我还添加了一个有趣的悖论作为 Henk 断言 p 在删除后未定义的对立面。]
如果将 p 初始化为 null,则会出现一个有趣的悖论。
但是,在这种情况下,该行为是有据可查的。当 delete 得到一个空指针时,它应该什么都不做,所以 p 保持不变。
c++ - 模板参数的引用变量的问题
以下小示例显示了我的问题:
错误信息(GCC):
错误:'static void X::xxx(T&&) [with T = int&]' 不能重载
错误:with 'static void X::xxx(T&) [with T = int&]'</p>
为什么?T = int&
--->T&
替换为int&&
in static void xxx(T& x)
?
如果问题的答案是肯定的,那么:
T&
不是左值引用,而是成为右值引用!- 以下代码应该可以工作:
但它没有:
错误信息(GCC):
错误:没有匹配函数调用 'X::xxx(int)'<br> 注意:候选者是:static void X::xxx(T&) [with T = int&]
然后T&
withT = int&
不等于T&&
并且不是右值引用。但如果不是,为什么第一个例子不起作用?(这是一个递归问题!)
但是指针类型没有出现类似的问题:
为什么引用在这种行为中有所不同?
c++ - 说明符和限定符之间的相关性?
const
并由C 规范volatile
调用。cv-qualifier
specifier
和qualifier
( )之间到底有什么区别cv-qualifier
?限定符也是说明符吗?
是否有必要qualifier
仅使用左值?
除了 之外还有什么限定词cv-qualifier
?
我的上述理解有意义吗?
c++ - 数组和右值
$4.2/1 - ““N T 数组”或“T 的未知边界数组”类型的左值或右值可以转换为“指向 T 的指针”类型的右值。结果是指向数组第一个元素的指针。”
除了在初始化/声明期间,我不确定我们如何获得数组类型的右值?
c++ - 模板非类型参数+左值/右值
C++03 $14.1/6 - “非类型非引用模板参数不是左值。”
C++0x $14.2/6-“非类型非引用模板参数是一个右值。”
重新措辞背后有什么具体的理由吗?
c - 需要左值
错误消息“需要左值”实际上是什么意思?
c++ - C++ 常量引用和常量之间的区别?
有什么区别:
和(没有&符号):
它们似乎都具有相同的 L 和 R 值,那么有什么区别?
objective-c - 如何在特定索引处更改 NSMutableArray 的值
[array objectAtIndex:i]
不能用作 L 值,因此不能用于设置索引 i 处的对象。
c++ - 将左值与抽象类一起使用
我在调用具有抽象类的左值的方法时遇到问题。类定义是:
SimulatorSequenceItemBase 有多个子类。for 循环中有序列(for 循环)和 for 项。
我想遍历序列并计算步骤,使用:
根最初引用根,每次调用 MoveNext 时,都应将引用调整为下一个元素。
上面提到的代码不起作用,因为根无法分配,因为根的类型是抽象的。但是,如果我将 root 设为指针,则无法在 MoveNext 中更改该值。
我怎样才能解决这个问题?更改任何代码都可以,但想法应该保持不变。
c++ - 关于左值到右值的转换
“左值到右值的转换不是在一元 & 运算符的操作数上进行的。”
我可以知道这意味着什么>任何人都可以解释一下..请
前任: