Каково различие низкого уровня между указателем ссылка?

const CString REG_SW_GROUP_I_WANT = _T("SOFTWARE\\My Corporation\\My Package\\Group I want");
const CString REG_KEY_I_WANT= _T("Key Name");

CRegKey regKey;
DWORD   dwValue = 0;

if(ERROR_SUCCESS != regKey.Open(HKEY_LOCAL_MACHINE, REG_SW_GROUP_I_WANT))
{
  m_pobLogger->LogError(_T("CRegKey::Open failed in Method"));
  regKey.Close();
  goto Function_Exit;
}
if( ERROR_SUCCESS != regKey.QueryValue( dwValue, REG_KEY_I_WANT))
{
  m_pobLogger->LogError(_T("CRegKey::QueryValue Failed in Method"));
  regKey.Close();
  goto Function_Exit;
}

// dwValue has the stuff now - use for further processing
11
задан Community 23 May 2017 в 12:16
поделиться

4 ответа

Теоретически они могли быть реализованы по-разному.

На практике каждый компилятор, который я видел, компилирует указатели и ссылки на один и тот же машинный код. Различие полностью на уровне языка.

Но, как говорит cdiggins, вы не должны полагаться на это обобщение, пока не убедитесь, что оно верно для вашего компилятора и платформы.

18
ответ дан 3 December 2019 в 03:04
поделиться

Нет абсолютно ничего надежного в связи между кодом C ++ и тем, какой машинный код генерирует компилятор.

Некоторые люди говорят «по моему опыту ... и т. Д. И т. Д.» но это более ненадежно, чем вы думаете. Не многие люди имеют реальный опыт в сколь-нибудь существенном разрезе всех возможных комбинаций компилятор / архитектура. [Edit: Я думаю, что Crashworks доказывает, что я ошибаюсь. : -)]

Рассмотрим следующий список компиляторов C ++ :

10
ответ дан 3 December 2019 в 03:04
поделиться

Указатели и ссылки имеют разную семантику в C ++, но генерируемый код тот же.

1
ответ дан 3 December 2019 в 03:04
поделиться

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

0
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: