Kenapa `cout

Patricia Arquette
Patricia Arquetteasal
2024-12-15 14:05:17201semak imbas

Why is `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<>E2, setiap pengiraan nilai dan kesan sampingan E1 disusun sebelum setiap pengiraan nilai dan kesan sampingan E2 ."

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn