Здравствуйте, stuav, Вы писали:
S>void some_fun(some_class*& obj){ S>........ S>}
S>что-то я синтаксиса не могу понять, что передавать в some_fun и чего она получает?
Функция принимает ссылку на указатель. Фактически эта запись означает, что функция возвращает указатель в качестве выходного параметра.
Если бы она его принимала по значению, то получала бы копию указателя и изменить его для вызывабщего кода не могла.
Здравствуйте, 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 часа чтобы въехать, что же означает эта запись . Поначалу думал, что это указатель на ссылку . .
Здравствуйте, 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* );// сюда можно(=функция на это расчитана) передавать nullvoid Foo(A& );// сюды ты не сможешь передать null
Вот для этого и нужно.
C>Я конечно понимаю, Страуструп — крутой чувак, но не до такой же степени изврат плодить. Три года пишу, на 3 языках(C, C++, Pascal). Приехал на работу от заказчика, потратил 1.5 часа чтобы въехать, что же означает эта запись . Поначалу думал, что это указатель на ссылку . .
Это Ваши проблемы, а не проблемы языка
Здравствуйте, Аноним, Вы писали:
А>Более простой пример: А>
А>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;
}