У меня есть библиотека с интерфейсом Swift, которая скрывает слой C ++. В C ++ у меня struct A { ...}
. Я хочу, чтобы Swift передавал копии этой структуры по значению (по разным сложным причинам). Swift понимает объявления C, но не C ++, поэтому мне нужно объявить для него некую фиктивную структуру C с тем же размером, например struct FakeA { char data[/* size of A */]; }
. Затем я мог бы использовать каламбур, чтобы перемещаться вперед и назад. Поскольку A
легко копировать, я думаю, что это нормально. Однако на cppreference.com говорится: «Однако, в отличие от C, объекты с тривиальными конструкторами по умолчанию не могут быть созданы путем простой переинтерпретации должным образом выровненного хранилища, например, памяти, выделенной с помощью std :: malloc: требуется размещение-new для формального введения новый объект и избежать потенциального неопределенного поведения ".
Как undefined мы говорим? Может ли это реально вызвать проблемы, скажем, при компиляции с Clang для arm64 и x86_64?