Rumah > pembangunan bahagian belakang > C++ > Apa yang Menentukan Susunan Penilaian Argumen dalam `std::cout`?

Apa yang Menentukan Susunan Penilaian Argumen dalam `std::cout`?

Barbara Streisand
Lepaskan: 2024-12-25 11:44:33
asal
519 orang telah melayarinya

What Determines the Evaluation Order of Arguments in `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;
}
Salin selepas log masuk

Yang menghairankan, output kod ini ialah:

Value of test is:      1       Return value of function is: 1 Value of test: 0
Salin selepas log masuk

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

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!

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