Rumah >pembangunan bahagian belakang >C++ >Mengapakah std::cout Perintah Penilaian Hujah Tidak Dapat Diramalkan dalam C ?
Menilai Argumen dalam std::cout Susunan Sisipan
Dalam C , susunan penilaian hujah dalam ungkapan menggunakan sisipan std::cout pengendali boleh mengelirukan. Pertimbangkan coretan kod 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 kod ini mengejutkan:
Value of test is : 1 Return value of function is : 1 Value of test : 0
Memahami output ini memerlukan menyelidiki susunan penilaian hujah.
Perintah Penilaian Tidak Ditentukan
Lazimnya, C tidak menyatakan susunan penilaian hujah dalam ungkapan. Ini terpulang kepada pengkompil untuk membuat keputusan. Walau bagaimanapun, terdapat beberapa pengecualian, seperti:
Andaian Penilaian Kiri-ke-Kanan
Ia adalah perkara biasa untuk andaikan penilaian kiri-ke-kanan untuk sisipan std::cout, tetapi ini tidak dijamin. Dalam contoh kami, ujian "dibayangi" dalam hujah ketiga dinilai sebelum panggilan ke foo, yang mengubahnya.
Menyelesaikan Kekeliruan
Untuk memastikan yang dimaksudkan tertib penilaian, bahagikan ungkapan kepada pernyataan berasingan:
double test = 0.0; std::cout << "Value of test is : \t" << test << std::endl; std::cout << "Return value of function is : " << foo(test) << std::endl; std::cout << "Value of test : " << test << std::endl;
Kod ini dengan betul output:
Value of test is : 0 Return value of function is : 1 Value of test : 1
Atas ialah kandungan terperinci Mengapakah std::cout Perintah Penilaian Hujah Tidak Dapat Diramalkan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!