Many variables in a C/C++ environment are pointers, so a convention like this is almost impossible to follow. Also objects in C++ are often oblique types where the specific implementation should be ignored by the programmer. Only when the actual type of an object is of special significance, the name should emphasize the type.
здесь: http://geosoft.no/development/cppstyle.html
я обычно использовал префикс p, но теперь смущает к чему его применять, т.к. большинство поинтеров заворачиваю в auto, scoped, shared — ptrs, а они в общем-то и не поинтеры. С другой стороны видеть разыменование -> у мембера без префикса p как-то непривычно.
А как вы именуете указатели в с++?
Здравствуйте, Wody, Вы писали:
W>А как вы именуете указатели в с++?
к любому правилу надо подходить с умом.
в общем случае, не надо писать префикс\суффикс чтобы показать то что переменная это указатель
но там где надо подчеркнуть что это указатель — там с префиксом или суффиксом
например
Foo foo;
Foo* fooPtr = &foo; // Ptr чтобы отличить от foo
void do_some(void* pBuf, size_t cbBuf);
// ИМО, это читается не хуже чем buf, bufSizeInBytes
class Foo
{
Foo* next; // ссылка на следующий объект
Foo** rootPtr; // ссылка на указатель, тут "Ptr" часть имени сущности на которую ссылается переменная
}
Именую как сказано в предыдущем сообщении, т.е. когда нужно подчеркнуть, что это указатель.
A>
A>void do_some(void* pBuf, size_t cbBuf);
A>// ИМО, это читается не хуже чем buf, bufSizeInBytes
A>
А по-моему, намного хуже. Самый лучший вариант — просто buffer (в префиксе смысла нет, а экономия трех символов не улучшает читабельность) и size (логично, что размер буфера в байтах в данном случае). А вот cbBuf ужасно дико и непонятно смотрится для программиста, не знакомого с венгерской нотацией (например, никогда не программировавшего под Win32).
W> Many variables in a C/C++ environment are pointers, so a convention like this is almost impossible to follow. Also objects in C++ are often oblique types where the specific implementation should be ignored by the programmer. Only when the actual type of an object is of special significance, the name should emphasize the type.
W>здесь: http://geosoft.no/development/cppstyle.html W>я обычно использовал префикс p, но теперь смущает к чему его применять, т.к. большинство поинтеров заворачиваю в auto, scoped, shared — ptrs, а они в общем-то и не поинтеры. С другой стороны видеть разыменование -> у мембера без префикса p как-то непривычно. W>А как вы именуете указатели в с++?
обычно никак, все эти вещи в итоге могут привести к венгерской нотации. Хотя, когда приходится писать код в каком-нибудь Vim, где нет постоянного помощника "что есть что", указатели именую как p_имя_указателя.
Здравствуйте, inviz, Вы писали:
A>>void do_some(void* pBuf, size_t cbBuf); A>>// ИМО, это читается не хуже чем buf, bufSizeInBytes
I>А по-моему, намного хуже. Самый лучший вариант — просто buffer (в префиксе смысла нет, а экономия трех символов не улучшает читабельность) и size (логично, что размер буфера в байтах в данном случае). А вот cbBuf ужасно дико и непонятно смотрится для программиста, не знакомого с венгерской нотацией (например, никогда не программировавшего под Win32).
Как всегда, зашла речь о венгерской нотации, что, как всегда, привело к смешению в кучу коней и людей. Разве не видно, что «p» и «cb» — префиксы совершенно разного назначения? «p» дублирует информацию, указанную в программе в другом месте: pBuf есть указатель на что-то, но это и так ясно из типа void *. В то же время, size_t может содержать размер, выраженный в разных единицах, и здесь префикс «cb» уточняет, что это размер в байтах (наряду с «cb» — «count of bytes» используют и «cch» — «count of characters», например, если в буфере лежит строка в UTF-8). Так что «p» ничего нового не говорит, а «cb» дает дополнительную информацию о содержимом параметра.