Псевдоним вместо новой переменной для синтаксиса сахара

Рассмотрим char firstLetter=word[0];, где вы ничего не делаете с firstLetter, кроме как используете его как сахар для удобства чтения. Есть ли что-то кроме #define, которое может просто создать встроенный «псевдоним» вместо выделения новой памяти? Я понимаю, что сценарий можно написать, но если что-то уже существует...


person user1420741    schedule 28.05.2012    source источник
comment
C++ или C (или оба)? Ответ (и его удобство) зависит от двух языков.   -  person    schedule 28.05.2012


Ответы (2)


Если вопрос действительно относится к C++, вы всегда можете создать псевдоним для объекта:

char& firstLetter=word[0];

Это создаст firstLetter и псевдоним для word[0] (при условии, что word является массивом, а не указателем, который будет изменен позже).

person Bo Persson    schedule 28.05.2012
comment
Это то, что я искал. Спасибо, Бо. Для тех, кто читает это, я также узнал о constexpr в C++ 11 для аналогичных, но не идентичных целей. - person user1420741; 01.06.2012

Здесь не происходит выделения памяти; значение word[0] может быть скопировано в регистр или в стек, но компилятору решать, нужно ли ему это делать.

Обратите внимание, что «встроенный псевдоним» приведет к созданию гораздо худшего кода; выражение word[n] подразумевает некоторое вычисление, которое, если бы вы использовали какую-то подстановку, повторялось бы несколько раз.

person Ernest Friedman-Hill    schedule 28.05.2012
comment
Ну, если только компилятор не выполняет общее удаление подвыражений и не вычисляет адрес один раз. Что вполне может быть (за исключением таких неприятных вещей, как volatile). Это не вопрос эффективности. - person ; 28.05.2012