Этот вопрос возник в результате программирования на смешанном языке. У меня была программа Fortran, которую я хотел вызвать из кода на С++. Fortran передает все свои параметры по ссылке (если не указано иное).
Итак, я думал, что буду умным (плохо начинаю прямо там) в своем коде на С++ и определяю процедуру Fortran примерно так:
extern "C" void FORTRAN_ROUTINE (unsigned & flag);
Этот код работал некоторое время, но (конечно, сразу, когда мне нужно было уйти), внезапно начал взрываться при обратном вызове. Четкая индикация стека перехваченных вызовов.
Другой инженер пришел за мной и исправил проблему, объявив, что подпрограмма была определена на С++ как
extern "C" void FORTRAN_ROUTINE (unsigned * flag);
Я бы принял это, за исключением двух вещей. Один из них заключается в том, что компилятор кажется довольно противоречивым для того, чтобы не передавать ссылочные параметры по ссылке, и я не могу найти никакой документации в любом месте, где говорится об этом. Другой заключается в том, что он одновременно сменил целый плот другого кода, так что теоретически это могло бы быть еще одним изменением, которое фиксировало все, что было.
Итак, вопрос в том, как С++ действительно передает ссылочные параметры? Возможно ли бесплатное копирование, копирование для небольших ценностей или что-то еще? Другими словами, являются ли ссылочные параметры совершенно бесполезными в программировании на смешанном языке? Я хотел бы знать, поэтому я никогда больше не делаю эту ошибку с ошибкой кода.