Dasar-Dasar std::expected
Kembalikan nilai atau error
Dasar-Dasar std::expected adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Nilai atau Kesalahan
std::expected<T, E> (C++23) menyimpan nilai berhasil bertipe T atau kesalahan bertipe E. Berbeda dari optional, tipe ini menyertakan alasan kegagalannya. Sertakan <expected>.
Mengembalikan Keberhasilan
Saat berhasil, Anda mengembalikan nilainya secara langsung; nilai tersebut disimpan sebagai tipe "expected", yaitu 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 Kesalahan
Bungkus kesalahan dalam std::unexpected(...) untuk menandakan kegagalan sambil tetap mengembalikan tipe 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";
}Memeriksa Keberhasilan
Uji hasilnya dalam konteks boolean atau dengan has_value(). True berarti hasil tersebut menyimpan nilai, sedangkan false berarti menyimpan kesalahan.
#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 keberhasilan. value() melempar std::bad_expected_access jika hasil tersebut sebenarnya menyimpan kesalahan.
#include <expected>
#include <iostream>
int main() {
std::expected<int, std::string> r = 7;
if (r) std::cout << r.value() << "\n";
}Membaca Kesalahan
Saat hasil berada dalam keadaan kesalahan, r.error() memberi Anda objek kesalahannya.
#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";
}Fallback value_or
Sama seperti optional, value_or(fallback) mengembalikan nilai keberhasilan atau nilai bawaan tanpa memeriksa kesalahannya.
#include <expected>
#include <iostream>
std::expected<int, std::string> f() { return std::unexpected("x"); }
int main() {
std::cout << f().value_or(0) << "\n"; // 0
}Membandingkan optional dan expected
std::optional menyatakan “nilai atau tidak ada”; std::expected menyatakan “nilai atau galat yang dijelaskan”. Pilih expected ketika pemanggil perlu mengetahui alasan kegagalan.
Tipe Galat yang Informatif
Tipe galat E dapat berupa enumerasi, struktur, atau teks pesan, sesuai yang paling baik untuk menjelaskan kegagalan dalam ranah 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 memungkinkan Anda meneruskan kegagalan sebagai nilai pengembalian biasa, yang berguna ketika pengecualian dinonaktifkan atau mahal untuk digunakan.
Catatan Ketersediaan
std::expected merupakan fitur C++23; pastikan kompiler dan opsi standar Anda (misalnya -std=c++23) mendukungnya sebelum digunakan.
Uji Cepat
Periksa pemahaman Anda tentang std::expected.
Rangkuman
Anda telah mempelajari std::expected:
- Menyimpan nilai (
T) atau galat (E). - Mengembalikan keberhasilan secara langsung dan galat melalui
std::unexpected. - Membaca nilainya dengan
*/value()danerror(). - Membawa alasan kegagalan, berbeda dari optional.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar std::expected” gratis?
Ya — teks lengkap “Dasar-Dasar std::expected” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Dasar-Dasar std::expected”?
Kembalikan nilai atau error Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Dasar-Dasar std::expected” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Merepresentasikan Ketiadaan dengan optional
- Mengakses Nilai optional
- Dasar-Dasar std::expected
- Pola Penanganan Error