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
Susan Sarandonasal
2025-01-01 10:45:111036semak imbas

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;
}

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!

Kenyataan:
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