В C ++ иногда переменная определяется, но не используется. Вот пример - функция для использования с COM_INTERFACE_ENTRY_FUNC_BLIND
Макрос ATL:
HRESULT WINAPI blindQuery( void* /*currentObject*/, REFIID iid, void** ppv, DWORD_PTR /*param*/ )
{
DEBUG_LOG( __FUNCTION__ ); //DEBUG_LOG macro expands to an empty string in non-debug
DEBUG_LOG( iid );
iid; // <<<<<<<----silence compiler warning
if( ppv == 0 ) {
return E_POINTER;
}
*ppv = 0;
return E_NOINTERFACE;
}
В приведенном выше примере параметр iid
используется с макросом DEBUG_LOG
, который раскрывается в пустую строку конфигурации без отладки . Таким образом, комментирование или удаление имени переменной iid
в сигнатуре не является вариантом. Когда компилируются конфигурации без отладки, компилятор порождает C4100: 'iid': формальный параметр без ссылки
предупреждение, поэтому, чтобы заглушить предупреждение, добавляется оператор iid;
, который считается запрещенным.
Вопрос в следующем: есть ли у нас какое-либо из следующих объявлений:
CSomeType variableName; //or
CSomeType& variableName; //or
CSomeType* variableName;
будет ли следующий оператор в коде C ++:
variableName;
не работать в любое время, независимо от того, что такое CSomeType
?