Re: что такое: some_class*& obj
От: A.J. Россия CintaNotes
Дата: 03.05.07 20:56
Оценка: 2 (1)
Здравствуйте, stuav, Вы писали:

S>void some_fun(some_class*& obj){

S>........
S>}

S>что-то я синтаксиса не могу понять, что передавать в some_fun и чего она получает?


Функция принимает ссылку на указатель. Фактически эта запись означает, что функция возвращает указатель в качестве выходного параметра.
Если бы она его принимала по значению, то получала бы копию указателя и изменить его для вызывабщего кода не могла.
что такое: some_class*& obj
От: stuav  
Дата: 03.05.07 20:52
Оценка:
void some_fun(some_class*& obj){
........
}

что-то я синтаксиса не могу понять, что передавать в some_fun и чего она получает?
Re[2]: что такое: some_class*& obj
От: Crackjack Россия  
Дата: 04.05.07 06:30
Оценка:
Здравствуйте, A.J., Вы писали:

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


S>>void some_fun(some_class*& obj){

S>>........
S>>}

S>>что-то я синтаксиса не могу понять, что передавать в some_fun и чего она получает?


AJ>Функция принимает ссылку на указатель. Фактически эта запись означает, что функция возвращает указатель в качестве выходного параметра.

AJ>Если бы она его принимала по значению, то получала бы копию указателя и изменить его для вызывабщего кода не могла.

А почему не записать попроще немножко? void some_fun(some_class** obj){...}, ну хотябы для уважения C-старичкам

или для гуру так более ... (ну не могу слов подобрать): void some_fun(some_class*& obj){...}

Я конечно понимаю, Страуструп — крутой чувак, но не до такой же степени изврат плодить. Три года пишу, на 3 языках(C, C++, Pascal). Приехал на работу от заказчика, потратил 1.5 часа чтобы въехать, что же означает эта запись . Поначалу думал, что это указатель на ссылку . .
Re[3]: что такое: some_class*& obj
От: AKh  
Дата: 04.05.07 06:40
Оценка:
Здравствуйте, Crackjack, Вы писали:

C>А почему не записать попроще немножко? void some_fun(some_class** obj){...}


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

С ссылками работать удобнее, они неявно скрывают за собой указатель.
Re[3]: что такое: some_class*& obj
От: Аноним  
Дата: 04.05.07 06:42
Оценка:
Здравствуйте, Crackjack, Вы писали:

C>А почему не записать попроще немножко? void some_fun(some_class** obj){...}, ну хотябы для уважения C-старичкам

C>или для гуру так более ... (ну не могу слов подобрать): void some_fun(some_class*& obj){...}
Более простой пример:
void Foo(A* );// сюда можно(=функция на это расчитана) передавать null
void Foo(A& );// сюды ты не сможешь передать null

Вот для этого и нужно.

C>Я конечно понимаю, Страуструп — крутой чувак, но не до такой же степени изврат плодить. Три года пишу, на 3 языках(C, C++, Pascal). Приехал на работу от заказчика, потратил 1.5 часа чтобы въехать, что же означает эта запись . Поначалу думал, что это указатель на ссылку . .

Это Ваши проблемы, а не проблемы языка
Re[4]: что такое: some_class*& obj
От: Crackjack Россия  
Дата: 04.05.07 07:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Более простой пример:

А>
А>void Foo(A* );// сюда можно(=функция на это расчитана) передавать null
А>void Foo(A& );// сюды ты не сможешь передать null
А>

А>Вот для этого и нужно.

Проверка инициализации ссылок происходит на этапе компиляции. Не понимаю кому придет в голову передать вместо ссылки NULL.

Если мне надо, то делаю так:
EL *p = NULL;

int f(EL **pp, int nEl)
{
int res;
*pp = (EL*)malloc(nEl*sizeof(EL));
...
return res;
}

f(&p);


Ну а вот так наверное делают все кто пишет на плюсах.
EL *p = NULL;

int f(EL *&pp, int nEl)
{
int res;
pp = new EL[nEl];
...
return res;
}

f(&p);


Лишний раз убеждаюсь, что язык это инструмент, которым необходимо уметь пользоваться. У каждого есть свой стиль и тонкости, незнание этих вещей приводит к тому, что производительность и выхлоп от работы просто теряются. C++ хороший инструмент. Уважаю людей которые умеют им пользоваться.
Re[5]: что такое: some_class*& obj
От: Аноним  
Дата: 04.05.07 08:25
Оценка:
Здравствуйте, Crackjack, Вы писали:

А>>Более простой пример:

А>>
А>>void Foo(A* );// сюда можно(=функция на это расчитана) передавать null
А>>void Foo(A& );// сюды ты не сможешь передать null
А>>

А>>Вот для этого и нужно.
C>Проверка инициализации ссылок происходит на этапе компиляции. Не понимаю кому придет в голову передать вместо ссылки NULL.
Я именно об этом и говорю! Если мне нужно запретить передавать null в функцию, я использую ссылку. Это лучше чем писать доп. проверки\документацию

<skipped>
C>Ну а вот так наверное делают все кто пишет на плюсах.
<skipped>
Неа, они используют смарт пойнтеры.

P.S. Пример ОЧЕНЬ плохой
Re[5]: что такое: some_class*& obj
От: Аноним  
Дата: 06.05.07 19:10
Оценка:
EL *p = NULL;

int f(EL *&pp, int nEl)
{
int res;
pp = new EL[nEl];
...
return res;
}

f(p, 5);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.