Рассмотрим char firstLetter=word[0];
, где вы ничего не делаете с firstLetter
, кроме как используете его как сахар для удобства чтения. Есть ли что-то кроме #define
, которое может просто создать встроенный «псевдоним» вместо выделения новой памяти? Я понимаю, что сценарий можно написать, но если что-то уже существует...
Псевдоним вместо новой переменной для синтаксиса сахара
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
Это то, что я искал. Спасибо, Бо. Для тех, кто читает это, я также узнал о constexpr в C++ 11 для аналогичных, но не идентичных целей.
- person user1420741; 01.06.2012
Здесь не происходит выделения памяти; значение word[0]
может быть скопировано в регистр или в стек, но компилятору решать, нужно ли ему это делать.
Обратите внимание, что «встроенный псевдоним» приведет к созданию гораздо худшего кода; выражение word[n]
подразумевает некоторое вычисление, которое, если бы вы использовали какую-то подстановку, повторялось бы несколько раз.
person
Ernest Friedman-Hill
schedule
28.05.2012
Ну, если только компилятор не выполняет общее удаление подвыражений и не вычисляет адрес один раз. Что вполне может быть (за исключением таких неприятных вещей, как
volatile
). Это не вопрос эффективности.
- person ; 28.05.2012