Tertib Penilaian Argumen dalam std::cout
Memahami cara argumen fungsi dinilai dalam C adalah penting untuk mengelakkan kejutan dalam kod anda. Dalam konteks std::cout, susunan penilaian argumen boleh mengelirukan, seperti yang digambarkan dalam contoh 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; }
Kod ini mungkin kelihatan mencetak nilai ujian sebelum dan selepas memanggil foo fungsi. Walau bagaimanapun, output mencadangkan sebaliknya:
Value of test is : 1 Return value of function is : 1 Value of test : 0
Tingkah laku ini disebabkan oleh susunan penilaian yang tidak ditentukan dalam ungkapan. Walaupun ia mungkin kelihatan intuitif untuk hujah yang paling jauh ke kanan (nilai ujian) untuk dinilai dahulu, ini tidak dijamin.
Untuk memastikan susunan penilaian yang diingini, bahagikan secara eksplisit ungkapan kepada pernyataan yang berasingan, sebagai ditunjukkan di bawah:
double value = test; std::cout << "Value of test is : \t" << value << "\tReturn value of function is : " << foo(test) << "\tValue of test : " << test << std::endl;
Ini memastikan bahawa nilai ujian disalin ke dalam nilai sebelum fungsi foo dipanggil. Hasilnya, output kini menggambarkan susunan penilaian yang dijangkakan dengan tepat:
Value of test is : 0 Return value of function is : 1 Value of test : 1
Atas ialah kandungan terperinci Bagaimanakah C 'std::cout` Menilai Argumen, dan Mengapa Pesanan Penting?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!