C++ Academy · Pelajaran

Asas std::expected

Pulangkan nilai atau ralat

Pelajaran 3 daripada 413 langkah

Asas std::expected ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Nilai atau Ralat

std::expected<T, E> (C++23) menyimpan sama ada nilai berjaya jenis T atau ralat jenis E. Berbeza daripada optional, ia membawa maklumat tentang sebab kegagalan. Sertakan <expected>.

Mengembalikan Kejayaan

Apabila berjaya, anda mengembalikan nilai secara langsung; nilai itu disimpan sebagai jenis "expected" T.

#include <expected>
#include <iostream>
std::expected<int, std::string> parse(bool ok) {
    if (ok) return 100;
    return std::unexpected("bad input");
}
int main() {
    auto r = parse(true);
    if (r) std::cout << *r << "\n";
}

Mengembalikan Ralat

Bungkus ralat dalam std::unexpected(...) untuk menandakan kegagalan sambil masih mengembalikan jenis yang sama.

#include <expected>
#include <iostream>
#include <string>
std::expected<int, std::string> div(int a, int b) {
    if (b == 0) return std::unexpected("divide by zero");
    return a / b;
}
int main() {
    auto r = div(8, 0);
    if (!r) std::cout << r.error() << "\n";
}

Menyemak Kejayaan

Uji hasil dalam konteks boolean atau dengan has_value(). True bermaksud hasil itu menyimpan nilai, manakala false bermaksud hasil itu menyimpan ralat.

#include <expected>
#include <iostream>
int main() {
    std::expected<int, int> r = 5;
    std::cout << r.has_value() << "\n"; // 1
}

Membaca Nilai

Gunakan *r atau r.value() untuk membaca nilai kejayaan. value() melontar pengecualian std::bad_expected_access jika hasil itu sebenarnya menyimpan ralat.

#include <expected>
#include <iostream>
int main() {
    std::expected<int, std::string> r = 7;
    if (r) std::cout << r.value() << "\n";
}

Membaca Ralat

Apabila hasil berada dalam keadaan ralat, r.error() memberikan objek ralat kepada anda.

#include <expected>
#include <iostream>
#include <string>
std::expected<int, std::string> f() { return std::unexpected("nope"); }
int main() {
    auto r = f();
    if (!r) std::cout << "error: " << r.error() << "\n";
}

value_or sebagai Nilai Sandaran

Sama seperti optional, value_or(fallback) mengembalikan nilai kejayaan atau nilai lalai tanpa memeriksa ralat.

#include <expected>
#include <iostream>
std::expected<int, std::string> f() { return std::unexpected("x"); }
int main() {
    std::cout << f().value_or(0) << "\n"; // 0
}

Pilihan berbanding Jangkaan

std::optional bermaksud "nilai atau tiada apa-apa"; std::expected bermaksud "nilai atau ralat yang dihuraikan". Pilih jangkaan apabila pemanggil perlu mengetahui sebab kegagalan.

Jenis Ralat yang Informatif

Jenis ralat E boleh berupa penghitungan, struktur atau rentetan mesej, mengikut mana-mana yang paling baik menerangkan kegagalan dalam bidang anda.

#include <expected>
#include <iostream>
enum class Err { NotFound, Denied };
std::expected<int, Err> get(bool ok) {
    if (ok) return 1;
    return std::unexpected(Err::Denied);
}
int main() {
    auto r = get(false);
    if (!r) std::cout << (int)r.error() << "\n";
}

Tidak Memerlukan Pengecualian

std::expected membolehkan anda menyebarkan kegagalan sebagai nilai pulangan biasa, yang berguna apabila pengecualian dinyahdayakan atau mahal.

Nota Ketersediaan

std::expected ialah ciri C++23; pastikan pengkompil dan bendera piawai anda, contohnya -std=c++23, menyokongnya sebelum digunakan.

Semakan Ringkas

Semak pemahaman anda tentang jangkaan C++.

Ringkasan

Anda telah mempelajari std::expected:

  • Menyimpan sama ada nilai (T) atau ralat (E).
  • Memulangkan kejayaan secara terus dan ralat melalui std::unexpected.
  • Membaca nilai dengan */value() dan error().
  • Membawa sebab kegagalan, tidak seperti pilihan.
Percuma untuk bermula

Pelajari C++ dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Asas std::expected” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Asas std::expected”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Asas std::expected”?

Pulangkan nilai atau ralat Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Asas std::expected” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Mewakili Ketiadaan dengan optional
  2. Mengakses Nilai optional
  3. Asas std::expected
  4. Corak Pengendalian Ralat
← Kembali ke C++ Academy