Rumah >pembangunan bahagian belakang >C++ >Apa yang Menentukan Susunan Penilaian Argumen dalam `std::cout`?
Aturan Penilaian dalam std::cout
Kekeliruan sering timbul mengenai susunan penilaian hujah apabila menggunakan operator sisipan std::cout Pertimbangkan kod berikut coretan:
#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; }
Yang menghairankan, output kod ini ialah:
Value of test is: 1 Return value of function is: 1 Value of test: 0
Ini melanggar susunan penilaian kiri ke kanan yang dibayangkan.
Sebab khusus
Dalam C, susunan penilaian elemen ungkapan tidak ditentukan (kecuali untuk beberapa kes khas, seperti && dan || pengendali dan pengenalan operator ternary untuk titik berjujukan). Oleh itu, tiada jaminan bahawa ujian akan menilai sebelum atau selepas foo(ujian) (yang mengubah suai nilai ujian).
Penyelesaian
Jika kod bergantung pada susunan penilaian tertentu, cara paling mudah ialah membahagikan ungkapan dalam berbilang pernyataan berasingan, seperti ini:
std::cout << "Value of test is: \t" << test << std::endl; foo(test); std::cout << "Return value of function is: " << foo(test) << std::endl; std::cout << "Value of test: " << test << std::endl;
Dengan cara ini susunan penilaian akan ditakrifkan dengan jelas dari atas ke bawah.
Atas ialah kandungan terperinci Apa yang Menentukan Susunan Penilaian Argumen dalam `std::cout`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!