Модификатор const в API C++

При работе с API в С++ столкнулся с массой нелогичностей.
Например, абсолютное неиспользование модификатора доступа const.

int GRD_API  GrdSign(
        HANDLE hGrd,            
        DWORD    dwAlgoNum,        
        DWORD    dwDataLng,        
        void    *pData,            
        DWORD    dwSignResultLng,    
        void    *pSignResult,    
        void    *pReserved
   );

Как определить, меняет ли функция исходные данные по указателю pData? В описании ничего про это не сказано.
Казалось бы, не должна. Зачем менять данные, которые мы хотим подписать?
Однозначно помог бы const, но его нет. Т.е. значит меняет?

Или допустим у класса CGrdDongle есть метод

HANDLE GetHandle()
{
    return m_hGrd;
}

Экземпляр класса этот метод не меняет, почему он тогда не объявлен как константный?

Рекомендую тем, кто создает API прочитать книгу Джеффа Элджера "C++ for real programmers" http://www.rsdn.ru/res/book/cpp/cpp_rea … ammers.xml
И это дело не эстетики (как форматирование кода), а нормального, правильного использования языка.

(2013-02-13 09:14:14 отредактировано Luck)

Re: Модификатор const в API C++

Это сделано для единообразия. :-)

Re: Модификатор const в API C++

Тогда вопрос, менять это планируется? Потому как аргумент "для однообразия" звучит какбы так... по-ламерски.

Re: Модификатор const в API C++

Чтобы не ждать следующей версии SDK, напишите запрос на hotline@guardant.ru и вам отправят по почте заголовочные файлы с модификатором const (grdapi.h и grddongle.h). Так как эти файлы используются у многих клиентов, то изменить в них что-то серьёзно, увы, не получится. Но какую-то мелочь типа "const" исправить можем,  пишите на форум. Спасибо за конструктивную критику.

Re: Модификатор const в API C++

А после выхода следующей версии SDK, еще раз напишите запрос на hotline@guardant.ru и вам опять отправят по почте заголовочные файлы...

То есть, разработчикам Guardant  придется поддерживать две ветки API: const и nonconst. Там может стоит включить const-версию очередной релиз, а nonconst-версию объявить устаревшей и, может, через пару лет забить на нее.

Как можно развести const и nonconst?

Можно в const-API использовать другой префикс, например GrdcXXXX.
Можно наоборот, в  nonconst-API использовать другой префикс, например GrdOldXXXX.

А можно сделать как-то так:

#ifdef GRD_DONT_USE_CONST_API
#define GRD_CONST
#else
#define GRD_CONST const
#endif

int GRD_API  GrdSign(
                  HANDLE   hGrd,            
                  DWORD    dwAlgoNum,        
                  DWORD    dwDataLng,        
        GRD_CONST void    *pData,            
                  DWORD    dwSignResultLng,    
                  void    *pSignResult,    
                  void    *pReserved
   );

Re: Модификатор const в API C++

Не нужно двух версий, т. к. при добавлении модификатора "const" компиляция не нарушается. Поэтому в следующем SDK будет только "const"-вариант. Если хотите получить файлы сейчас напишите в hotline.

(2013-02-18 09:36:52 отредактировано ittakir)

Re: Модификатор const в API C++

Mikhail Bakalyarov пишет:

Не нужно двух версий, т. к. при добавлении модификатора "const" компиляция не нарушается. Поэтому в следующем SDK будет только "const"-вариант. Если хотите получить файлы сейчас напишите в hotline.

Дождусь нового SDK, ибо негоже использовать часть файлов старых, часть подсовывать новых, накладывать патчи и т.п. Еще я на 100% не уверен, но возможно объектники тоже надо будет пересобирать.
Надеюсь, что в документации это также будет отражено (хотя с const и так будет понятно, что является входными параметрами, а что выходными).
Спасибо за оперативный ответ.