Saya tidak mengerti satu penggunaan khusus usus besar.
Saya menemukannya di buku The C ++ Programming Language oleh Bjarne Stroustrup, edisi ke-4, bagian 11.4.4 "Telepon dan Kembali", halaman 297:
void g(double y)
{
[&]{ f(y); } // return type is void
auto z1 = [=](int x){ return x+y; } // return type is double
auto z2 = [=,y]{ if (y) return 1; else return 2; } // error: body too complicated
// for return type deduction
auto z3 =[y]() { return 1 : 2; } // return type is int
auto z4 = [=,y]()−>int { if (y) return 1; else return 2; } // OK: explicit return type
}
Usus besar yang membingungkan muncul di baris 7, dalam pernyataan return 1 : 2
. Saya tidak tahu apa itu. Ini bukan label atau operator ternary.
Sepertinya operator ternary kondisional tanpa anggota pertama (dan tanpa ?
), tetapi dalam kasus itu saya tidak mengerti bagaimana itu bisa bekerja tanpa syarat.
Jawaban:
Ini salah ketik dalam buku ini. Lihatlah Errata untuk cetakan 2 dan 3 Bahasa Pemrograman C ++ . Contohnya harus seperti di bawah ini:
sumber
(y)
dan tidak adily
?(cond) ? a : b
untuk kejelasan - itu membantu saya menghindari salah membaca misalnya pernyataanfoo = x > y ? a : b
sepertifoo = x ...
ketika membaca sekilas melalui kode.Sepertinya saya salah ketik. Mungkin seharusnya:
Perhatikan bahwa karena lambda tidak mengambil parameter apa pun, parens adalah opsional. Anda dapat menggunakan ini sebagai gantinya, jika Anda lebih suka:
sumber
return 1 : 2;
adalah kesalahan sintaksis, ini bukan kode yang valid.return (y) ? 1 : 2;
Sebaliknya, pernyataan yang benar akan lebih seperti .sumber