#include <fstream>
#include <iostream>
#include <map>
int main(int argc, char** argv) {
try {
std::map<std::string, int> m{{"a", 1}, {"b", 2}};
std::cout << m.at("c") << std::endl;
} catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
W języku C++ podczas pobierania nieistniejącego klucza mapy wyjątek wygląda na map::at: key not found
. Nie podano informacji o kluczu .Dlaczego wyjątek C++ nie dostarcza szczegółów połączenia?
Ponadto, jeśli użytkownik uzyskuje dostęp do nieistniejącego pliku, komunikat wyjątku std::ios_base::failure
wygląda na ios_base::clear: unspecified iostream_category error
. Nazwa o nazwie, która spowodowała wyjątek, nie została podana. W związku z tym może zająć trochę czasu, aby dowiedzieć się, gdzie wyjątek jest, jeśli istnieje wiele zastosowań map.at()
lub ifstream is
w projekcie.
W przeciwieństwie do tego, Python może powiedzieć KeyError: 'c'
lub FileNotFoundError: [Errno 2] No such file or directory: 'foo'
.
Czy to tylko konwencja C++? Dziękuję Ci.
Pamiętaj, że w C++, klucz z mapy nie może być wymienialny na sznurku. – nos
C# FileNotFoundException nie wspomina również o nazwie pliku, którego nie można znaleźć –
@nos: w duchu stdlib powinieneś chyba powiedzieć "nie ma op", ale nawet wtedy można by twierdzić, że powinien może zrobić to dla wszystkich typów, gdzie to możliwe. Imho głównym powodem jest solidność: co się stanie, jeśli podczas próby złożenia ładnego i dandysowego komunikatu o błędzie napotkasz inny wyjątek? – PlasmaHH