Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Perintah Penilaian Hujah Mempengaruhi Output `std::cout` dalam C ?

Bagaimanakah Perintah Penilaian Hujah Mempengaruhi Output `std::cout` dalam C ?

Susan Sarandon
Lepaskan: 2025-01-01 10:45:11
asal
1039 orang telah melayarinya

How Does Argument Evaluation Order Affect `std::cout` Output in 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;
}
Salin selepas log masuk

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
Salin selepas log masuk

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;
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan