Rumah >pembangunan bahagian belakang >C++ >Kenapa `cout
Tingkah Laku Tidak Ditakrifkan: Memahami cout << a << a
Dalam C , adalah penting untuk memahami konsep tingkah laku yang tidak ditentukan. Tingkah laku tidak ditentukan merujuk kepada situasi di mana tingkah laku program tidak ditentukan oleh piawaian C, mengakibatkan hasil yang tidak dapat diramalkan.
Pertimbangkan pernyataan berikut:
cout << a++ << a;
Di sini, kami mempunyai urutan operasi yang melibatkan operator kenaikan ( ) dan operator sisipan (<<). Apabila menggunakan operasi ini pada pembolehubah a, kami menghadapi gelagat yang tidak ditentukan kerana ketiadaan titik jujukan.
Titik jujukan ialah titik khusus dalam kod di mana pengkompil menjamin bahawa semua kesan sampingan telah berlaku. Walau bagaimanapun, dalam pernyataan di atas, tiada titik urutan antara penilaian a dan a. Ini bermakna bahawa susunan operasi ini dilakukan tidak ditentukan oleh standard.
Akibatnya, output kenyataan ini mungkin berbeza-beza bergantung pada pelaksanaan. Dalam kes tertentu, output mungkin "01", manakala dalam kes lain, ia boleh menjadi "10". Walau bagaimanapun, piawaian tidak menjamin kes yang akan berlaku, menjadikan tingkah laku tidak ditentukan.
Kemas Kini C 17
Adalah penting untuk ambil perhatian bahawa peraturan yang mengawal penilaian ungkapan dalam C telah dikemas kini dalam C 17. Dalam C 17, peraturan berikut digunakan untuk ungkapan operator shift seperti << dan >>:
"Dalam ungkapan operator anjakan E1<
Peraturan ini menghapuskan gelagat yang tidak ditentukan dalam pernyataan asal. Dalam C 17, pernyataan cout << a << a; akan sentiasa menghasilkan output "01", kerana kesan sampingan a (kenaikan a) dijamin akan berlaku sebelum penilaian a.
Atas ialah kandungan terperinci Kenapa `cout. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!