Использование nullptr в вызовах функций API? - PullRequest
6 голосов
/ 30 октября 2011

Использование C ++ с Visual Studio 2010. Я нахожусь в процессе преобразования моих NULL в nullptr. С моим кодом это нормально. Однако, если я позвоню в WINAPI, например:

__checkReturn WINOLEAPI OleInitialize(IN LPVOID pvReserved);

обычно я бы назвал это так:

::OleInitialize(NULL);

Можно ли безопасно использовать nullptr там, где я бы использовал NULL при таком вызове?

То есть я могу сделать это:

::OleInitialize(nullptr);

Также как и MFC api:

CFileDialog fileDlg(TRUE, ".txt", NULL, 0, strFilter);

Могу ли я заменить

CFileDialog fileDlg(TRUE, ".txt", nullptr, 0, strFilter);

Полагаю, что могу, но я просто хочу убедиться, что нет ошибок.

UPDATE

Итак, я прошел и заменил все мои NULL на nullptr, и, похоже, он работает почти везде, но я получаю следующую ошибку в следующей строке:

propertyItem = new CMFCPropertyGridProperty(_T("SomeName"),
"SomeValue", "SomeDescription", nullptr, nullptr, nullptr, nullptr);

8> c: \ something \ something.cpp (118): ошибка C2664: 'CMFCPropertyGridProperty :: CMFCPropertyGridProperty (const CString &, const COleVariant &, LPCTSTR, DWORD_PTR, LPCTSTR, LPCTSTR, LPCTSTR) ': невозможно преобразовать параметр 4 из 'nullptr' в 'DWORD_PTR' 8> A native nullptr может быть преобразован только в bool или, используя reinterpret_cast, к целочисленному типу

(Обратите внимание, что CMFCPropertyGridProperty - это класс Microsoft MFC). Что это значит?

1 Ответ

13 голосов
/ 30 октября 2011

Да, вы можете безопасно использовать nullptr везде, где вы используете NULL.

NULL расширен до целочисленного константного выражения со значением ноль, которое затем может быть преобразовано в значение нулевого указателя любого типа. nullptr является «литералом указателя», который делает то же самое: он преобразуется в нулевое значение указателя любого типа.

Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...