gpt4 book ai didi

c# - 条件运算符的引用语义

转载 作者:太空狗 更新时间:2023-10-29 23:43:35 25 4
gpt4 key购买 nike

作为条件运算符 (cond ? expr1 : expr2) 的结果,我一直在尝试使用左值

考虑下面的例子

class /*(1)*/ Value {
public int MagicNumber { get; private set; } = 0;
public void Increment() {
/* magical code, that modifies MagicNumber */
}
}

void Main()
{
Value v1, v2;
/*(2)*/ bool condition = /*...*/;
(condition ? v1 : v2).Increment(); // (3)
}

现在,根据 condition 的值,我怀疑 v1v2 会递增。实际上就是这样,只要 Value ((1)) 是类。一旦我将它更改为 struct,它就会变成 Value type 并且 (3) 行什么都不做(我怀疑是因为 v1v2 被复制、递增和丢弃)。到此为止,它是有道理的。一旦 (2) (condition) 在编译时已知(例如通过定义它 const bool),奇怪的行为就开始了。然后进行一些优化,v1v2 中的一个实际上就地递增。

我的问题是,在以下情况下条件运算符的正确行为应该是什么

(condition ? v1 : v2).Increment();

一旦 v1v2struct。它真的应该取决于 condition 是编译时常量吗?

最佳答案

按照建议,我已经向 Microsoft 发送了错误报告,结果证明,该标准没有明确说明条件运算符的结果是右值(值)还是左值(变量)。通过标准中其他事物的传递性,结果似乎是 should be an r-value .

已决定修复该错误,并且修复工作已经在进行中。

关于c# - 条件运算符的引用语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42742336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com