Asas std::expected
Pulangkan nilai atau ralat
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()danerror(). - Membawa sebab kegagalan, tidak seperti pilihan.
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
- Mewakili Ketiadaan dengan optional
- Mengakses Nilai optional
- Asas std::expected
- Corak Pengendalian Ralat