Будет ли «имя_переменной; «Оператор C ++ всегда запрещен?

В 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 ?

20
задан sharptooth 27 October 2010 в 07:50
поделиться