Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Perintah Penilaian Hujah Mempengaruhi Output `std::cout` dalam C ?
Susunan Penilaian dalam std::cout Argumen
Susunan penilaian hujah yang diserahkan kepada std::cout boleh mengelirukan, terutamanya apabila satu atau lebih argumen ialah panggilan fungsi yang mengubah suai nilai yang lain hujah.
Contoh Kod
Pertimbangkan coretan kod C berikut:
#include <iostream> bool foo(double &m) { m = 1.0; return true; } int main() { double test = 0.0; std::cout << "Value of test is : \t" << test << "\tReturn value of function is : " << foo(test) << "\tValue of test : " << test << std::endl; return 0; }
Output Tidak Dijangka
Apabila dilaksanakan, kod ini menghasilkan yang berikut output:
Value of test is : 1 Return value of function is : 1 Value of test : 0
Output ini mungkin kelihatan mengejutkan, kerana seseorang mungkin menjangkakan nilai ujian ialah 1 selepas fungsi foo dipanggil.
Penjelasan
Turutan penilaian argumen dalam std::cout tidak ditentukan oleh piawai C, kecuali untuk beberapa kes tertentu seperti operator logik (&&, ||) dan pengendali ternary (? :).
Dalam contoh ini, pengkompil bebas menilai argumen dalam sebarang susunan yang dipilihnya. Dalam kes ini, fungsi foo dinilai terlebih dahulu, mengubah suai nilai ujian kepada 1.0. Walau bagaimanapun, nilai ujian yang disimpan dalam pernyataan std::cout masih 0.0, kerana pernyataan std::cout dinilai sebelum fungsi foo dipanggil.
Penyelesaian
Untuk memastikan susunan penilaian yang diingini, kod hendaklah ditulis semula sebagai berikut:
std::cout << "Value of test before function call: " << test << std::endl; foo(test); std::cout << "Value of test after function call: " << test << std::endl;
Ini memastikan ujian dinilai sebelum dan selepas panggilan fungsi foo, menghasilkan output yang dijangkakan:
Value of test before function call: 0 Value of test after function call: 1
Atas ialah kandungan terperinci Bagaimanakah Perintah Penilaian Hujah Mempengaruhi Output `std::cout` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!