C++ vs D: Default param values and struct to array casting

Andrew Edwards edwards.ac at gmail.com
Fri Sep 6 10:02:42 UTC 2019


On Friday, 6 September 2019 at 09:49:33 UTC, Johan Engelen wrote:
> On Friday, 6 September 2019 at 09:14:31 UTC, Andrew Edwards 
> wrote:
>> C++ allows the for following:
>>
>> struct Demo
>> {
>> 	float a, b, c, d;
>> 	Demo() { a = b = c = d = 0.0f; }
>> 	Demo(float _a, float _b, float _c, float _d) {
>> 		a = _a;
>> 		b = _b;
>> 		c = _c;
>> 		d = _d;
>> 	}
>> 	float  operator[] (size_t i) const { return (&a)[i]; } //[3]
>
> "(&a)[i]" is undefined behavior in C++. You cannot index into 
> struct members like that. Of course it may work in certain 
> cases, but UB is UB. Don't do it!
>
> I found a more detailed explanation for you: 
> https://stackoverflow.com/questions/40590216/is-it-legal-to-index-into-a-struct
>
> -Johan

Thanks for the clarification and link. This is a example taken 
from a popular library I’m trying to port to D. I’m not trying to 
do it in C++ myself, just to understand how to interface to the 
code so that I can get a reference example compiled in D.

Andrew


More information about the Digitalmars-d-learn mailing list