coding style: префиксы у указателей в C++
От: Wody  
Дата: 10.08.11 18:34
Оценка:
Обратил внимание на этот пункт:

29. Naming pointers specifically should be avoided.

Line* line; // NOT: Line* pLine;
            // NOT: LIne* linePtr;

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 как-то непривычно.
А как вы именуете указатели в с++?
Re: coding style: префиксы у указателей в C++
От: Abyx Россия  
Дата: 10.08.11 19:10
Оценка: +2
Здравствуйте, 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" часть имени сущности на которую ссылается переменная
}
In Zen We Trust
Re[2]: coding style: префиксы у указателей в C++
От: inviz  
Дата: 11.08.11 00:50
Оценка: 1 (1)
Именую как сказано в предыдущем сообщении, т.е. когда нужно подчеркнуть, что это указатель.

A>
A>void do_some(void* pBuf, size_t cbBuf);
A>// ИМО, это читается не хуже чем buf, bufSizeInBytes
A>


А по-моему, намного хуже. Самый лучший вариант — просто buffer (в префиксе смысла нет, а экономия трех символов не улучшает читабельность) и size (логично, что размер буфера в байтах в данном случае). А вот cbBuf ужасно дико и непонятно смотрится для программиста, не знакомого с венгерской нотацией (например, никогда не программировавшего под Win32).
Re: coding style: префиксы у указателей в C++
От: trickster Россия  
Дата: 11.08.11 12:44
Оценка:
Здравствуйте, Wody, Вы писали:

W>Обратил внимание на этот пункт:

W>

W>29. Naming pointers specifically should be avoided.
W>

W>Line* line; // NOT: Line* pLine;
W>            // NOT: LIne* linePtr;
W>

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_имя_указателя.
Re[3]: coding style: префиксы у указателей в C++
От: Roman Odaisky Украина  
Дата: 14.08.11 08:07
Оценка:
Здравствуйте, 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» дает дополнительную информацию о содержимом параметра.
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.