Символ указателя * и пробел...
От: Shmj Ниоткуда  
Дата: 19.04.23 14:10
Оценка: -2 :))
Какой вариант лучше:

void fun1(const char *const *const test1)
{
    std::cout << test1[0];
}



void fun1(const char * const * const test1)
{
    std::cout << test1[0];
}


void fun1(const char* const* const test1)
{
    std::cout << test1[0];
}


// ?


Как вы пишите и почему?
Re: Символ указателя * и пробел...
От: BSOD  
Дата: 19.04.23 14:28
Оценка:
Здравствуйте, Shmj, Вы писали:

S>
S>void fun1(const char *const *const test1)
S>

Вот так.
Sine vilitate, sine malitiosa mente
Re: Символ указателя * и пробел...
От: rg45 СССР  
Дата: 19.04.23 14:34
Оценка: +5 :))
Здравствуйте, Shmj, Вы писали:

S>Какой вариант лучше:

S>Как вы пишите и почему?

Снова вопросы из серии "куда вы кладете бороду — НА одеяло или ПОД одеяло". Такие вопросы обычно прописаны в корпоративных соглашениях о кодировании и никогда никого не парят.

Я ж тебе советовал уже — почитай че-нить по C++, чтоб флудить на профессиональном уровне. Ну что за детский лепет? Ты бы спосил еще, сколко пробелов у вас в отступах.
--
Re[2]: Символ указателя * и пробел...
От: Shmj Ниоткуда  
Дата: 19.04.23 14:34
Оценка:
Здравствуйте, BSOD, Вы писали:

S>>
S>>void fun1(const char *const *const test1)
S>>

BSO>Вот так.

А если не будет второго const, то:

void fun1(const char *const *test1)


?
Отредактировано 19.04.2023 14:35 Shmj . Предыдущая версия .
Re: Символ указателя * и пробел...
От: Muxa  
Дата: 19.04.23 14:40
Оценка: +2
S>Как вы пишите и почему?

Хз. Этим занимается кланг-формат.
Re[3]: Символ указателя * и пробел...
От: rg45 СССР  
Дата: 19.04.23 14:48
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, BSOD, Вы писали:


S>>>
S>>>void fun1(const char *const *const test1)
S>>>

BSO>>Вот так.

S>А если не будет второго const, то:


То никто ничего не заметит. Потому что оба варианта — это одна и та же функция:

http://coliru.stacked-crooked.com/a/aad2595bb2686267

void fun1(const char *const *test1) {}

void fun1(const char *const * const test1) {} // error: redefinition of 'void fun1(const char* const*)'


Говорила же бабушка: нехрен использовать const для параметров, передаваемых по значению.
--
Re: Символ указателя * и пробел...
От: Maniacal Россия  
Дата: 19.04.23 14:50
Оценка: 8 (1) +5
Здравствуйте, Shmj, Вы писали:

S>Какой вариант лучше:


По хорошему, при объявлении типа указывается, что это указатель.
char* a;


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

a — Указатель, b — нет.
Re[3]: Символ указателя * и пробел...
От: BSOD  
Дата: 19.04.23 15:05
Оценка:
Здравствуйте, Shmj, Вы писали:

S>А если не будет второго const, то: void fun1(const char *const *test1) ?

Совершенно верно.
Хз, почему. В сишных учебниках так было, во многих опенсорсных проектах....
Sine vilitate, sine malitiosa mente
Re[2]: Символ указателя * и пробел...
От: Shmj Ниоткуда  
Дата: 20.04.23 07:59
Оценка:
Здравствуйте, rg45, Вы писали:

R>Я ж тебе советовал уже — почитай че-нить по C++, чтоб флудить на профессиональном уровне. Ну что за детский лепет? Ты бы спосил еще, сколко пробелов у вас в отступах.


Можно пример какого уровня флуда вы бы хотели?
Re: Символ указателя * и пробел...
От: B0FEE664  
Дата: 20.04.23 08:23
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Какой вариант лучше:

Никакой: никаких голых указателей — в цивилизованной программе это просто неприлично.

S>Как вы пишите и почему?

Для константных строк есть std::string_view
И каждый день — без права на ошибку...
Re[3]: Символ указателя * и пробел...
От: so5team https://stiffstream.com
Дата: 20.04.23 08:32
Оценка: +1 :)
Здравствуйте, Shmj, Вы писали:

S>Можно пример какого уровня флуда вы бы хотели?


Если ваш флуд допускает тюниниг, то есть ли такая опция как "полное отключение"?
Re[3]: Символ указателя * и пробел...
От: rg45 СССР  
Дата: 20.04.23 11:35
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Можно пример какого уровня флуда вы бы хотели?


Если флуд неизбежен, тогда я бы предпочел флудить по порядочку, начиная с определений: https://timsong-cpp.github.io/cppwp/intro.defs
--
Re[2]: Символ указателя * и пробел...
От: CEMb  
Дата: 14.05.23 08:30
Оценка:
Здравствуйте, Maniacal, Вы писали:

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

M>
M>char* a, b;
M>

M>a — Указатель, b — нет.

char* a{};
char b{};

или, чтобы не путаться:
using pchar = char*;
//...
pchar a{};
char b{};
Re[2]: Символ указателя * и пробел...
От: andyp  
Дата: 15.05.23 10:05
Оценка: -1
Здравствуйте, B0FEE664, Вы писали:

S>>Какой вариант лучше:

BFE>Никакой: никаких голых указателей — в цивилизованной программе это просто неприлично.

Ухтыжка. Указатели как концепция в CS есть, а использовать их нельзя. Зря ее лобастые ботаники придумывали, надо отменять. Может, ты этот свой совет как-то сузишь, а? Что-то там про передачу владения, интерфейсы или еще что?
Re[3]: Символ указателя * и пробел...
От: B0FEE664  
Дата: 22.05.23 10:15
Оценка:
Здравствуйте, andyp, Вы писали:

S>>>Какой вариант лучше:

BFE>>Никакой: никаких голых указателей — в цивилизованной программе это просто неприлично.
A>Ухтыжка.
Экспрессивная гипербола применена для выражения полной убеждённости.

A>Указатели как концепция в CS есть, а использовать их нельзя.

Можно, но не прилично.

A>Зря ее лобастые ботаники придумывали, надо отменять.

Про отмену я ничего не писал — не придумывайте. Хорошо, когда язык предоставляет все уровни абстракций и все виды парадигм программирования.

A> Может, ты этот свой совет как-то сузишь, а?

Нет. Зачем? В нормальной программе все указатели обёрнуты в классы, которые предоставляют функциональность специфичную для данного вида указателей.
А уж вот такое:
void fun1(const char* const* const test1)
{
    std::cout << test1[0];
}

вообще быть не должно. Это должно быть что-то вида:
template<std::size_t N>
void fun1(const std::array<std::string_view, N>& test1)
{
    std::cout << test1[0];
}

— исправлено: добавил амперсанд.

A>Что-то там про передачу владения, интерфейсы или еще что?

Какие проблемы с передачей владения, интерфейсами или еще что?
И каждый день — без права на ошибку...
Отредактировано 22.05.2023 10:24 B0FEE664 . Предыдущая версия .
Re[4]: Символ указателя * и пробел...
От: andyp  
Дата: 22.05.23 10:34
Оценка: -1
Здравствуйте, B0FEE664, Вы писали:

A>>Указатели как концепция в CS есть, а использовать их нельзя.

BFE>Можно, но не прилично.

Алгоритмы типа std::partition плачут в сторонке.

A>> Может, ты этот свой совет как-то сузишь, а?

BFE>Нет. Зачем? В нормальной программе все указатели обёрнуты в классы, которые предоставляют функциональность специфичную для данного вида указателей.

В ТВОЕЙ программе.

BFE>
BFE>template<std::size_t N>
BFE>void fun1(const std::array<std::string_view, N>& test1)
BFE>{
BFE>    std::cout << test1[0];
BFE>}
BFE>

BFE>- исправлено: добавил амперсанд.

Даже тут тебе может потребоваться работать с куском массива. Зачем вместо пары итераторов (ну или любого другого range) контейнер и пара итераторов?

A>>Что-то там про передачу владения, интерфейсы или еще что?

BFE>Какие проблемы с передачей владения, интерфейсами или еще что?

Обычно советуют не передавать голые указатели при передаче владения.
Re[5]: Символ указателя * и пробел...
От: B0FEE664  
Дата: 22.05.23 12:36
Оценка:
Здравствуйте, andyp, Вы писали:

A>>>Указатели как концепция в CS есть, а использовать их нельзя.

BFE>>Можно, но не прилично.
A>Алгоритмы типа std::partition плачут в сторонке.
Что с ними? Кто их обидел?

A>>> Может, ты этот свой совет как-то сузишь, а?

BFE>>Нет. Зачем? В нормальной программе все указатели обёрнуты в классы, которые предоставляют функциональность специфичную для данного вида указателей.
A>В ТВОЕЙ программе.
Зачем вам указатели без обертки? Чтобы сложнее было другим читать/править код?

A>Даже тут тебе может потребоваться работать с куском массива. Зачем вместо пары итераторов (ну или любого другого range) контейнер и пара итераторов?

Я не против пары итераторов.

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

Я же вообще советую не передавать голые указатели между С++ кодом.
И каждый день — без права на ошибку...
Re[6]: Символ указателя * и пробел...
От: andyp  
Дата: 22.05.23 13:57
Оценка:
Здравствуйте, B0FEE664, Вы писали:

A>>Алгоритмы типа std::partition плачут в сторонке.

BFE>Что с ними? Кто их обидел?

ну так у них два указателя на входе (итератора, если угодно, но суть-то не меняется) Или если указатель переименовать в итератор, то можно?

A>>>> Может, ты этот свой совет как-то сузишь, а?

BFE>>>Нет. Зачем? В нормальной программе все указатели обёрнуты в классы, которые предоставляют функциональность специфичную для данного вида указателей.
A>>В ТВОЕЙ программе.
BFE>Зачем вам указатели без обертки? Чтобы сложнее было другим читать/править код?

При разработке например std::rotate пошли ж на эти сложности

A>>Даже тут тебе может потребоваться работать с куском массива. Зачем вместо пары итераторов (ну или любого другого range) контейнер и пара итераторов?

BFE>Я не против пары итераторов.

А пары указателей, а тройки, а итератор + sentinel?

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

BFE>Я же вообще советую не передавать голые указатели между С++ кодом.

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

И это, заметь, разговор все равно свелся к интерфейсам. Поэтому в первом своем посте я и предлагал сузить рекомендации до них.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.