What a great explanation of simple, understandable techniques for increasing readability and maintainability. We need more of these!
@KillerMZE
11 ай бұрын
I recently had a problem like the "a load of bool" section. I solved it using bit flags and or-ing them together. It's easier to read in my opinion, since you easily see which flags are being set, and those that aren't just don't appear
@szaszm_
Жыл бұрын
26:00 That point about not using span directly needs some justification. I don't see how you could shoot yourself in the foot with span. Just use a span of const T for read only buffers. I don't see anything dangerous in there.
@maxferger6149
10 ай бұрын
Re "Too many default" 29:25 for C++ earlier than C++20 you may use a lambda that gets immediately evaluated. Optimizations work AFAIK. Example: auto server_socket([](){ server_socket::config conf; conf.port = 1666; conf.address = "127.0.0.1"; conf.nonblocking = false; return conf; }());
@olafschluter706
9 ай бұрын
Looks like C++ going javascript....
@toniriikonen2544
11 ай бұрын
It makes me a bit uneasy, thinking about these good type-system properties and then thinking of half the world using JavaScript with zero type-system.
@Norman_Fleming
10 ай бұрын
I have been away from c++ for a while, I thought constructors should NOT throw. referring to timestamp 10:00
@szaszm_
10 ай бұрын
constructors should throw to signal failed object creation. Destructors should not throw.
@kevanschwitzer8585
Жыл бұрын
Nice talk!
@d_bud
10 ай бұрын
"There are other means to get a CVE" Hahahahah!
@olafschluter706
9 ай бұрын
It is funny that it took C++ standardisation 10 years to realise that named initialiser lists, introduced in C with C99, are better than constructors for structs, at least occasionally, so they should be there as an option.
@yourdadsbestfriend7101
Жыл бұрын
these are some really nice tips!
@lhpl
Жыл бұрын
Congratulations! You just reinvented Ada! ;-)
@LunarLambda
10 ай бұрын
What an excellent advertisement for the Rust programming language
@Phantom-lr6cs
5 ай бұрын
LOLZ
@_clemens_
11 ай бұрын
Wrong argument: I don't like this tip tbh. I don't want to read code a see 50 different types which I need to cross reference to know what they mean. Just write units tests for your logic, and easy logic mistakes will be captured easily (and you test on much more than simple type correctness). Thats also why I limit the use of "auto" for readibility where it really makes things less complicated.
@OldMacBonit
10 ай бұрын
Just use Haskell (or any other language with a strict and expressive type system with a solid theoretical basis so type inference is feasible).
@FalcoGer
11 ай бұрын
@13:20 I prefix all my enum class typenames with E. So it'd be ETrim, EPad, and ELineFeed.
@brynyard
Жыл бұрын
Or you could maybe do something like: enum class format { truncate, pad_center, pad_left, pad_right, line_feed }; void print( std::string_view, std::vector ); print( "Corn Holio!", { format::truncate, format::line_feed } );
@avramlevitter6150
Жыл бұрын
Alternatively, if you have a lot of booleans, you could wrap it all up into a bitset and have them be flags. But I think that unless you need to store/pass the conditions as a set, enums are cleaner. The vector would involve searching it for the conditions, you're forced to allocate memory, and nothing stops you from passing { truncate, truncate, truncate, truncate... }
@superscatboy
Жыл бұрын
print("But the implementation will require an unnecessary loop, and some serious thought as to how inputs like this (which are totally valid to the type system) are handled", {format::truncate, format::line_feed, format::pad_left, format::pad_left, format::line_feed, format::pad_center, format::truncate, format::pad_right, format::pad_center, format::line_feed});
@TanigaDanae
Жыл бұрын
Some alternative to your approach is to use flag enums enum class format : int { none = 0, pad_left = 1
Пікірлер: 23