亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

乘法賦值運算符不尊重數學優先級

乘法賦值運算符不尊重數學優先級

C#
慕斯709654 2022-06-12 16:24:30
例如://Does NOT honor the rules of Math precedenceInt32 value=10;value*=15 + 12;  //value=170//Does honor the rules of Math precedence, and does the multiplication on the second line BEFORE the additionInt32 value=10;value=value * 15 + 12; //value=162我希望第一個能正常工作,編譯器會先完成*,但它沒有。這是意料之中的,因為 * 在賦值運算符的左側。有什么方法可以創建另一個像 ++ 和 – 運算符一樣運行的運算符,有點像這樣......public Int32 =*(Int32 lhs , Int32 rhs){     //Using the above values      lhs=lhs*rhs}操作和 =* 將在右側有 *,因此清楚地指示到達賦值運算符之前的 *。我只是不確定如何在評估 rhs 變量之前將其分解。任何想法都會有所幫助。
查看完整描述

2 回答

?
largeQ

TA貢獻2039條經驗 獲得超8個贊

如果您希望更改運算符的優先級,則您的代碼沒有意義*=。


如果我從這個開始(忽略它不是有效的 C# 的事實):


Public Int32 =*(Int32 lhs , Int32 rhs)

{

     //Using the above values 

     Return (10*15) + 12;

}

...然后有這個代碼:


Int32 value = 10;

value =* 15 + 12;

...調用=*將設置lhs為10,但它必須設置rhs為的結果15 + 12。


這將與內置*=運算符的行為相同。


查看完整回答
反對 回復 2022-06-12
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

根據 OP 在問題評論部分的進一步評論,可能創建運算符是為了更容易編寫聚合操作 : sum = sum + value,因此不遵循正常的數學規則,它可能比你提出的更有用.

C# 你不能創建新的運算符?,F有的運算符是內置在語言中的,因此至少要添加任何新的運算符,您還需要在編譯器中實現一些部分來解析它們。

C# 確實允許運算符重載,但它會導致定義您自己的整數,我認為這不是一條幸福的道路。

除了 C# 之外,還有其他語言確實允許這樣做(特別是運算符只是普通方法的函數式語言)。

來自C# 語言規范

某些運算符可以重載。運算符重載允許為其中一個或兩個操作數屬于用戶定義的類或結構類型的操作指定用戶定義的運算符實現(運算符重載)。


查看完整回答
反對 回復 2022-06-12
  • 2 回答
  • 0 關注
  • 148 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號