初始化清單和運算子的右邊
考慮以下程式碼片段:
class foo { }; struct bar { template<typename... T> bar(T const&...) { } }; foo& operator<<(foo& f, bar const&) { return f; } int main() { foo baz; baz << {1, -2, "foo", 4, 5}; return 0; }
編譯器在抱怨運算子的右側(RHS) 使用初始化清單
初始化器列表和表達式
初始化器列表不是C 標準中定義的表達式。函數和運算子的參數通常必須是表達式。然而,該標準定義了某些上下文中初始化列表的例外情況,包括作為函數參數、下標和賦值表達式。
二元運算子沒有例外
沒有在二元運算子的右側(或左側)使用初始值設定項清單的例外。這項禁令源自於允許初始化清單作為表達式時出現的解析挑戰。對初始值設定項清單和區塊使用大括號會導致語法中的歧義。
限制的基本原理
將初始值設定項清單的使用擴展到表達式的提案2007 年曾考慮過。但是,最終決定允許初始化列表作為二元運算符的右側操作數,但不允許作為左側操作數
結論
初始化列表不能在運算符的RHS 上使用,因為它們沒有在標準中定義為表達式。雖然它們在特定上下文中的使用存在某些例外,但由於在初始化列表和區塊中使用大括號,允許它們作為通用運算符參數將帶來重大的解析挑戰。
以上是為什麼我不能在 C 中運算子的右側使用初始化清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!