Что имеет больше смысла - символ* строка или символ *строка? [дубликат]

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

blockquote>

В настоящее время, как показано в vscode-gitlens, выпуск 385 , это делается только через терминал:

  • Перейти к представлению управления версиями (Ctrl + Shift + G) и разверните раздел GITLENS на боковой панели
  • Найдите ветку для удаления в разделе Remotes (например, геолокация)
  • Нажмите правой кнопкой мыши на ветку и выберите Delete Branch (через терминал)

Текст, введенный в терминал, гласит: git push origin :aRemoteBranch

blockquote>

Это остается (Q1 2019) официальным способом удаления удаленной ветви.

27
задан Community 23 May 2017 в 11:55
поделиться

13 ответов

В следующем объявлении:

char* string1, string2;

string1 символьный указатель, но string2 отдельный символ только. Поэтому объявление обычно форматируется как:

char *string1, string2;

, который делает это немного более ясным, что эти * относится string1, но не string2. Хорошая практика должна постараться не объявлять несколько переменных в одном объявлении, особенно если некоторые из них являются указателями.

56
ответ дан Hosam Aly 28 November 2019 в 04:01
поделиться

Бьярне Страуструпу есть что сказать по этому поводу :

Критическая путаница возникает (только), когда люди пытаются объявить несколько указателей с помощью одного объявления:

int* p, p1; // probable error: p1 is not an int*
35
ответ дан System.Cats.Lol 28 November 2019 в 04:01
поделиться

Технически, имеет смысл писать

char *f

, поскольку *f оператор объявления в этом, в то время как эти char спецификатор объявления, который указывает основной тип всех операторов объявления. Операторы объявления содержат операторы как (), [] и &, о котором можно думать изменения базового типа и фактического идентификатора.

я использую вышеупомянутую форму помещения * к идентификатору, потому что это подчеркивает, что *f на самом деле оператор объявления, в то время как char основной тип.

В известной степени, можно думать о модификаторах в операторе объявления для создания типа в спецификаторе объявления, когда операторы применяются к идентификатору. Но это не всегда работает:

int a, *b, &c = a, d(), e[1], C::*f;

Примечание, как все из [1 110], *b, d() и e[1] статически твердость к интервалу - кроме [1 114] и C::*, которые объявляют ссылку (таким образом это должно быть инициализировано), и указатель на участника класса соответственно.

14
ответ дан Johannes Schaub - litb 28 November 2019 в 04:01
поделиться

Что никто не упомянул, все же то, что следующий

char *string

может также быть считан как объявление типа выражения *string (чтение: косвенный оператор относился к указателю string) как char. С этой точки зрения нотация совершенно разумна.

Однако я использую

char * string

сам ;)

9
ответ дан Christoph 28 November 2019 в 04:01
поделиться

(станд.:: строка лучше, чем символ* для большей части использования.)

я всегда помещал * с типом, как в символе*, потому что, , поскольку Stroustrup отметил , это подчеркивает тип.

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

char* p, q;  // oops, probably not what was meant
// this is mandated by our style guide:
char* p;
char* q;
6
ответ дан nhed 28 November 2019 в 04:01
поделиться

В C ++ имеет смысл помещать * в идентификатор типа, как char *, так как он является частью самого типа.

Но если вы определяете несколько переменных в одном выражении, это становится двусмысленным и вводящим в заблуждение.

char* foo, bar;

В то время как foo теперь имеет тип char *, bar имеет тип char. Поэтому многие люди предпочитают

char *foo, bar;

, чтобы прояснить это.

4
ответ дан raimue 28 November 2019 в 04:01
поделиться

учитывая, что можно сделать многократные объявления на одной строке, она имеет больше смысла мне, что она принадлежит переменной, а не типу, например,

char *pString, arrString[20];
3
ответ дан Simon 28 November 2019 в 04:01
поделиться

В большинстве случаев std::string str гораздо предпочтительнее, чем char *.

При этом я обычно делаю что-то вроде DataType * ptr, чтобы лучше выделить *. Или, гораздо чаще, std::tr1::smart_ptr<DataType> ptr, или, может быть, auto_ptr.

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

3
ответ дан David Thornley 28 November 2019 в 04:01
поделиться

Мне действительно нравится" char* foo" идиома, потому что она помещает всю информацию о типе переменной в одном месте". char *foo" может довольно сбивать с толку, если" *foo" часть снабжается вкладками на полпути через экран!

, С другой стороны, я действительно соглашаюсь с другими плакатами, что это сбивает с толку при объявлении нескольких переменных на одной строке. Я пытаюсь не смешать типы при объявлении, что несколько переменных на одной строке, и char и char* являются отдельными типами в моем уме, так, чтобы конкретная ситуация не была той, которая, вероятно, произошла бы в моем коде.

3
ответ дан MattK 28 November 2019 в 04:01
поделиться

Мой ответ: ни один, необходимо использовать:

char * string;

Рассматривают, если бы Dennis Ritchie (разработчик языка C) вместо того, чтобы использовать '*' символ использовал ключевое слово 'ptr', мы должны были бы все говорить:

char ptr string;

и не имеющий эти обсуждения.

Это также, по моему скромному мнению, более читаемо.

3
ответ дан Brian Neal 28 November 2019 в 04:01
поделиться

Я также думаю символ*, нечто имеет больше смысла при объявлении единственной переменной.

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

символ *нечто, панель;

2
ответ дан Dana Holt 28 November 2019 в 04:01
поделиться

Лично я никогда не объявляю несколько переменных на одной строке.

Из-за этого и то, что я действительно нахожу шаблоны хорошими, я нахожу это простое обращение шаблона:

type varname

Это означает, что я почти всегда говорю, что интервал [] iArray или интервал* piArray (или независимо от того, что венгерская запись была бы, я не использовал C++ за десятилетие).

Это также означает, что я никогда не использую интервал iArray [], так как то, что это - массив, является частью типа, не именем переменной.

Взгляды этот путь помог мне упростить определения несколько раз также.

Просто предложение другого POV

2
ответ дан Bill K 28 November 2019 в 04:01
поделиться

Первое предложение (символа* var) было бы прекрасно, пока Вы только объявили единственную переменную на строку, но лично, я предпочитаю "символ *var"; и единственная переменная на строку - это может сделать функцию дольше в количестве строки, но очень ясно.

Наконец, C++ должен использовать "строковый var", но мы всегда заканчиваем или наследовавший код с "символом *" или имеющий необходимость соединиться с библиотеками неC++.

1
ответ дан James Fisher 28 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: