| ▲ | stinos 3 hours ago | |||||||
> Why should people complexify and uglify their C++ code with the uint8_t pointer (or std::byte), when void* works just fine?? Fair point (although to be honest: 'complexify' feels a bit of an exaggeration here to me), but the answer to this why is simple: document and express intent clearly. The compiler gave you an error first such that you're forced to consider what you're doing. Any seasoned C++ developer seeing this knows what this reinterpret_cast means. > Wow. With std::span the complexity-meter bumps in the red zone and goes even higher! Same remark: yes, it's a bit more text to read, but again: to me (and many others I'm guessing) this clearly expresses intent. I also do not find it particularly hard to read. I mean, it's C++, you're likely going to encounter templates at one point or another, except in super specific software perhaps. But no-one also ever argued the C++ learning curve was easy, and trying to make it easier by refusing to use features which were added for good reasons and instead going back to constructs which are the very source of those reasons seems a bit backwards. > As a nice addition, if you use SAL annotations, the function could be decorated a bit to help code analyzers detecting memory bugs Some might also say it complexifies and uglifies the code. And in any case makes it non-portable on top of that. | ||||||||
| ▲ | VulgarExigency 2 hours ago | parent | next [-] | |||||||
It seems unlikely that this is the case, as the author appears to be experienced, but the post reads like the author has never had to maintain a "simple" and "beautiful" function that was mangled into incomprehensibility over the years, and where if a more expressive type signature had been written from the start, it would have restricted the damage caused over time. | ||||||||
| ▲ | thomasmg 2 hours ago | parent | prev | next [-] | |||||||
I don't have a strong opinion what is better in this case, but my view is: > document and express intent clearly Arguably, the void* does that as well? > Any seasoned C++ developer seeing this knows what this reinterpret_cast means. Same for void*? > it's a bit more text to read If you have to call it many times, this adds up. > Some might also say it complexifies and uglifies the code I think the point is that it adds security, which the other options don't. And, it doesn't add complexity on the caller, but only at one place: the implementation. > makes it non-portable on top of that. This can be solved. | ||||||||
| ||||||||
| ▲ | repelsteeltje 2 hours ago | parent | prev [-] | |||||||
+1 And SAL annotations aren't even C++ proper. | ||||||||