initializer_listを推定できる場合には特別なルールがあることは知っていますが、次のことを発見するまで、どういうわけかそれは決してないと思いました。推論または省略してもよい場合のルールは何initializer_list
ですか?
次の例は論理的で、ほとんど言語不足のように感じますか?
#include <initializer_list>
void test() {
bool reverse = true;
const auto ascend = {1,2,3};//OK : seems to deduce to std::initializer_list<const int>
//const auto a_or_d_AUTO = reverse ? {3,2,1} : {1,2,3};//not ok, why ?
const auto i = reverse ? 3 : 1;// also fine
const auto a_or_d = reverse ? std::initializer_list<const int>({3,2,1}) : std::initializer_list<const int>({1,2,3});//also OK
}
これは控除とは何の関係もありません。の文法で?:
は、3つのオペランドすべてに実際の式が必要です。
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
ブレース-INIT-listは発現されず、単に一緒に使用することができません?:
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加