Указатель C ++ в функции - PullRequest
       33

Указатель C ++ в функции

3 голосов
/ 03 марта 2010

Я знаю, что технически все три способа, приведенные ниже, действительны, но есть ли логическая причина сделать это так или иначе? Я имею в виду, что многие вещи в с ++ "технически обоснованы", но это не делает их менее глупыми.

int* someFunction(int* input)
{
    // code
}  

или

int *someFunction(int *input)
{
    // code
}

или

int * someFunction(int * input)
{
    // code
}

Я лично думаю, что третий раздражает, но есть ли "правильный" способ? Я, как правило, более склонен использовать первый (так как второй больше похож на то, что он используется в качестве оператора разыменования - что не так)

Ответы [ 6 ]

5 голосов
/ 03 марта 2010

Это вопрос личного вкуса. Я предпочитаю первый подход, тогда как программисты старой школы склонны использовать второй (исходя из старых добрых времен Си).

Для разницы рассмотрим следующее:

int* p, q; // here p is a pointer to int, but q is just an int!

Привлекательность первого способа (int* p) состоит в том, что он читается как «указатель int является типом p», тогда как альтернативный int *p читается как «int является типом *p» что тоже правильно).

2 голосов
/ 03 марта 2010

Все эквивалентны. Выберите аромат, который подходит вам лучше всего. Просто будьте уверены, что бы вы ни выбрали, вы применяете этот выбор в каждом случае. Куда направляются ваши звезды и фигурные скобки, гораздо менее важно, чем каждый раз помещать их в одно и то же место.

Лично я предпочитаю int* someFunction(int* input);, но кого это волнует?

1 голос
/ 03 марта 2010

Я лично использую второй вариант, потому что int *p1, p2; выглядит лучше и менее запутанно, чем int* p1, p2; или int * p1, p2;. То же самое с типом возврата функций, чтобы сохранить тот же стиль.

Это личное дело, не существует "хорошего" или "плохого" способа.

0 голосов
/ 03 марта 2010

Все эквивалентны. Мне нравится третий, потому что он выделяет *. Другие люди отличаются.

Если вы работаете над проектом с другими, используйте установленный стиль. Если нет, определитесь со своим стилем.

0 голосов
/ 03 марта 2010

Нет "одного правильного пути". Все зависит от личных предпочтений.

Первый подход обычно не совместим с наличием нескольких деклараторов в одном объявлении, поэтому люди, которые его используют, обычно не используют более одного декларатора в объявлении

int* p, b; // misleading, since `b` is `int` and not `int*`

И все же у первого подхода есть свои сторонники.

0 голосов
/ 03 марта 2010

Я предпочитаю второе, по причинам, изложенным в моем предыдущем ответе . *someFunction(someInput) имеет тип int.

РЕДАКТИРОВАТЬ: Керниган и Ричи определенно намеревались второй. Например, этот фрагмент из белой библии.

...