Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ссылки и объекты в параметрах функции
|
|||
|---|---|---|---|
|
#18+
Всем привет. Вот тут вопрос возник интересный, а в c++ объекты в функцию по умолчанию передаются не по ссылке а по значению? :) То есть не так как в паскале? Ну скажем, если я напишу: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. То, когда функция my_func отработает, значение obj.my_var останется равно единице, а не тройке? Просто я не мог найти источников, где бы это явно было расписано, но уже не первый раз попадаю на такую фразу типа "желательно передавать объекты в функцию по ссылке, а не по значению, так как второй вариант затрачивает много времени на копирование объекта". В общем, просветите плиз. А то я свято верю, что во всех языках программирования объекты передаются по ссылке по-умолчанию (ведь даже в php и в js это так), а тут вот такое :) Обрадуйте меня, что я всё неверно понял и реально объекты не копируются при передаче в функцию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2013, 23:27 |
|
||
|
ссылки и объекты в параметрах функции
|
|||
|---|---|---|---|
|
#18+
Програмёрв c++ объекты в функцию по умолчанию передаются не по ссылке а по значению? :) То есть не так как в паскале? Объекты в С++ "изнутри" выглядят так же как record в Паскале. Объекты (а точнее переменные типа класс) в Дельфи это указатели. Предыдущие две строчки читать до просветления. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 00:20 |
|
||
|
ссылки и объекты в параметрах функции
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПрограмёрв c++ объекты в функцию по умолчанию передаются не по ссылке а по значению? :) То есть не так как в паскале? Объекты в С++ "изнутри" выглядят так же как record в Паскале. Объекты (а точнее переменные типа класс) в Дельфи это указатели. Предыдущие две строчки читать до просветления. дааа... многое уже видимо позабыл я :) Почему-то был уверен что и record передаётся по-ссылке, но потом вспомнил, что в delphi почти для каждого record есть свой тип-указатель (ptype) для данных нужд. Значит неправильно помню (уже и не помню, когда в Дельфи последний раз сидел) :) А ещё вычитал, что в C++ разница между struct и class лишь в том, что в первом нету прав доступа (то есть все атрибуты public). просто у меня было ложное мнение в голове, что struct = record, а class = class. Вот и просветление пришло. :) Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 00:59 |
|
||
|
ссылки и объекты в параметрах функции
|
|||
|---|---|---|---|
|
#18+
[quot ПрограмёрА ещё вычитал, что в C++ разница между struct и class лишь в том, что в первом нету прав доступа (то есть все атрибуты public)[/quot]неа. в struct область видимости по умолчанию - public, в class - private. Всё, других различий нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 01:21 |
|
||
|
ссылки и объекты в параметрах функции
|
|||
|---|---|---|---|
|
#18+
ПрограмёрВот тут вопрос возник интересный, а в c++ объекты в функцию по умолчанию передаются не по ссылке а по значению? :) То есть не так как в паскале?Не так. Они всегда передаются по значению. ПрограмёрНу скажем, если я напишу: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. То, когда функция my_func отработает, значение obj.my_var останется равно единице, а не тройке?да. При вызове my_func будет вызван конструктор копирования для класса A, и уже копия будет обрабатываться внутри my_func(). ПрограмёрПросто я не мог найти источников, где бы это явно было расписано, но уже не первый раз попадаю на такую фразу типа "желательно передавать объекты в функцию по ссылке, а не по значению, так как второй вариант затрачивает много времени на копирование объекта".Время тут не так уж важно, но да, если у тебя процедура типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. то конструктор копирования будет вызван три раза. И если этот класс не просто набор примитивных типов а что-то более сложное с навороченным КК, то будет очень тяжко... В таком случае лучше передавать по ссылке и объявлять параметры константами. ПрограмёрВ общем, просветите плиз. А то я свято верю, что во всех языках программирования объекты передаются по ссылке по-умолчанию (ведь даже в php и в js это так), а тут вот такое :) Обрадуйте меня, что я всё неверно понял и реально объекты не копируются при передаче в функцию :)Нет. В С и С++ параметры передаются по значению всегда. Это так исторически сложилось. У предков С не было составных объектов, были только примитивные типы которые с легкостью кладутся на стек. В С появились структуры, но для каждой структуры можно сделать ссылку - ссылка это примитивный тип который с легкостью копируется на стек. Поэтому в С было решено: по значению и всё! K&R1.8 Arguments - Call by Value One aspect of C functions may be unfamiliar to programmers who are used to some other languages, particulary Fortran. In C, all function arguments are passed ``by value.'' This means that the called function is given the values of its arguments in temporary variables rather than the originals. This leads to some different properties than are seen with ``call by reference'' languages like Fortran or with var parameters in Pascal, in which the called routine has access to the original argument, not a local copy. Ну а в С++ последовали этому правилу. Но так как в С++ захотелось приравнять составные объекты к примитивным, то добавили конструктор копирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 01:28 |
|
||
|
ссылки и объекты в параметрах функции
|
|||
|---|---|---|---|
|
#18+
White Owl, О, спасибо... Более чем развёрнуто ответили. Кстати, а вот документацию английскую Вы откуда взяли? Конечно лучше русскую, но подойдёт и англ. :) а то я что-то найти не могу... может плохо искал, но было бы круто иметь какой-нить источник, что бы сначала почитать, а уже потом спрашивать . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 01:38 |
|
||
|
ссылки и объекты в параметрах функции
|
|||
|---|---|---|---|
|
#18+
ПрограмёрWhite Owl, О, спасибо... Более чем развёрнуто ответили. Кстати, а вот документацию английскую Вы откуда взяли? Это K&R - классический учебник по С. The C programming Language By Brian W. Kernighan and Dennis M. Ritchie. Published by Prentice-Hall in 1988 ISBN 0-13-110362-8 (paperback) ISBN 0-13-110370-9 абсолютное "надо иметь". Еще и Старуструпа весьма желательно для С++ фишек. Но это цитата была из K&R. ПрограмёрКонечно лучше русскую, но подойдёт и англ. :) а то я что-то найти не могу... может плохо искал, но было бы круто иметь какой-нить источник, что бы сначала почитать, а уже потом спрашивать .Ищи лучше. Оно все в сети есть. Это более новые урезанные и извращенные учебники под копирайтами прячутся, а классика доступна всем и всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 01:55 |
|
||
|
ссылки и объекты в параметрах функции
|
|||
|---|---|---|---|
|
#18+
Програмёр, можно раз и навсегда запомнить простое правило: -- в С все параметры передаются по значению. -- в С++ все параметры передаются по значению, кроме ссылок. Ссылки при передаче инициализируются. но на самом деле второе правило должно было бы звучать так же, если бы не особая семантика присваивания ссылок. если по это забыть (или наоборот помнить), то правила становятся одинаковыми. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 12:13 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=68&tid=2019808]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 180ms |

| 0 / 0 |
