5 ms·
Wait, but what if you have std::string str1{"Apple"}; std::string str2 = std::move(str1); Isn't str1 in an invalid (err, unspecified?) state and you shouldn't
by Tyr42 4y ago
Wait, but what if you have
std::string str1{"Apple"};
std::string str2 = std::move(str1);
Isn't str1 in an invalid (err, unspecified?) state and you shouldn't use it? It's not `null` sure, but it's not good to use.
- lenkite 4y agoThis issue is caught and flagged by clang-tidy. Though technically the standard says it is in valid but un-specified state. Because of short string optimisation, the move might be possibly a copy, so one should not rely on the contents being empty.
- deschutes 4y agoClang tidy covers only the most trivial use after move scenarios. It's useful coverage but isn't and never will be complete like the rust borrow checker.
- jcelerier 4y agoNo, you can absolutely use it (but you most likely want to clear() or assign an empty string to it before doing e.g. push_back as move does not necessarily clear the moved-from object - std::move(some_int) won't clear the int)
- Tyr42 4y agoI mean, it won't have a useful value, so I need to re assign to it, at which point I could just be using a new variable right? It might not be null, but I can't do much more with it than I can with null. I need to assign something new first
- jcelerier 4y ago> I mean, it won't have a useful value, so I need to re assign to it, at which point I could just be using a new variable right? I have a hard time understanding why "I could just be using a new variable" follows from "it won't have a useful value".