приведенный целочисленный тип передается по ссылке - PullRequest
3 голосов
/ 02 мая 2011

Если у вас есть целочисленный тип t1 и функция, получающая, возможно, меньший целочисленный тип t2 по ссылке, будет ли проблематично вызывать функцию ((t2) var_t1)?

Ответы [ 4 ]

2 голосов
/ 02 мая 2011

Было бы хорошо привести к t2 тогда и только тогда, когда функция взяла бы константную ссылку , и в этом случае к ней можно было привязать временное значение, произведенное приведением к t2.

Поскольку это противоречит цели ссылки на целочисленный тип, я бы предположил, что ссылка неконстантная, поэтому ответ: да, это было бы проблематично. Чтобы было ясно, он даже не скомпилируется, если вы приведете к t2.

Если вы хотите function изменить только части переменной t1, используйте reinterpret_cast для ссылки / указателя. Конечно, это теоретически вызовет неопределенное поведение.

1 голос
/ 02 мая 2011

Функция должна принимать ссылку const, иначе она не скомпилируется.

1 голос
/ 02 мая 2011

Приведение будет создавать временное, и если меньший тип НЕ принимает const ссылку , ваш код НЕ будет компилироваться, поскольку временную привязку нельзя привязать к неконстантной ссылке.

Если для этого потребуется const ссылка , то он скомпилируется, но приведение может вызвать переполнение, что является обычной проблемой при преобразовании большего типа данных в меньший.

0 голосов
/ 02 мая 2011

Поскольку вы также пометили вопрос C, в этом случае «по ссылке» будет означать использование указателя, вы не можете применить оператор & к результату приведения.Однако вы можете использовать:

function((t2 [1]){ (t2)var });

Обратите внимание, что это допустимый C, но не C ++, одна из причин, по которой вам не следует смешивать теги C и C ++ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...