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
Теоретически они могли быть реализованы по-разному.
На практике каждый компилятор, который я видел, компилирует указатели и ссылки на один и тот же машинный код. Различие полностью на уровне языка.
Но, как говорит cdiggins, вы не должны полагаться на это обобщение, пока не убедитесь, что оно верно для вашего компилятора и платформы.
Нет абсолютно ничего надежного в связи между кодом C ++ и тем, какой машинный код генерирует компилятор.
Некоторые люди говорят «по моему опыту ... и т. Д. И т. Д.» но это более ненадежно, чем вы думаете. Не многие люди имеют реальный опыт в сколь-нибудь существенном разрезе всех возможных комбинаций компилятор / архитектура. [Edit: Я думаю, что Crashworks доказывает, что я ошибаюсь. : -)]
Рассмотрим следующий список компиляторов C ++ :
Указатели и ссылки имеют разную семантику в C ++, но генерируемый код тот же.
Просто для уточнения, хотя может быть правда, что ссылки то же самое, что и указатели под капотом почти во всех компиляторах, полагаться на такое поведение - серьезная ошибка. Это не только может укусить вас за задницу, когда вы меньше всего этого ожидаете, но и неправильное использование ссылок. Если вам нужен указатель, используйте указатель.