Tidak.
Ini adalah cara yang sangat valid untuk membuat optional
secara default.
Bahkan untuk penugasan, Anda dapat menyalin-menetapkan optional
yang dibuat secara default dengan = {}
alih-alih menggunakan std::nullopt
:
cppreference sebenarnya mengatakan hal yang sama:
Batasan pada konstruktor nullopt_t
ada untuk mendukung op = {};
dan op = nullopt;
sebagai sintaksis untuk melepaskan objek opsional.
… seperti halnya proposal asli untuk fitur:
Perhatikan bahwa ini bukan satu-satunya cara untuk melepaskan objek opsional. Anda juga bisa menggunakan:
op = std::nullopt;
Anda mungkin bertanya pada diri sendiri mengapa std::nullopt
ada. Proposal juga membahas hal ini:
itu memperkenalkan redundansi ke dalam antarmuka
[contoh serupa]
Di sisi lain, ada penggunaan di mana penggunaan nullopt tidak dapat diganti dengan notasi lain yang sesuai:
void run(complex<double> v);
void run(optional<string> v);
run(nullopt); // pick the second overload
run({}); // ambiguous
if (opt1 == nullopt) ... // fine
if (opt2 == {}) ... // illegal
bool is_engaged( optional<int> o)
{
return bool(o); // ok, but unclear
return o != nullopt; // familiar
}
Meskipun beberapa situasi bisa digunakan dengan sintaksis {}, penggunaan nullopt membuat maksud pemrogram lebih jelas. Bandingkan ini:
optional<vector<int>> get1() {
return {};
}
optional<vector<int>> get2() {
return nullopt;
}
optional<vector<int>> get3() {
return optional<vector<int>>{};
}
Singkatnya, std::nullopt
dapat berguna, tetapi dalam kasus Anda, ini tergantung pada gaya.
person
Asteroids With Wings
schedule
16.07.2020