powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметров функции.
15 сообщений из 15, страница 1 из 1
Передача параметров функции.
    #38230884
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте! Хотелось бы понять принципиальную разницу (если она есть) между использование конструкций типа
Код: plaintext
1.
int f1(int &t)

и
Код: plaintext
1.
int f1(int *t) 

(передача параметров по ссылке и через указатель);


ну и, соответственно, интересует разница между
Код: plaintext
1.
int f1(const int &t) 

и
Код: plaintext
1.
int f1(const int *t)

.
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38230986
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути вопрос может быть объединён со старой темой:

http://www.sql.ru/forum/actualthread.aspx?tid=784661

Там коллега всё довольно доходчиво объяснил.
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38231087
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вкратце добавлю к тому, что уже сказано в той теме, ссылку на которую уже дали.

Код: plaintext
1.
 int f1(int &t) 

переменная t разименована, и не может ссылаться ни на что.


Код: plaintext
1.
 int f1(int *t) 

переменная t НЕразименована, и МОЖЕТ ссылаться ни на что (может быть NULL).
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38231111
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы, но: я специально подчеркнул, что речь идёт о стадии применения, а не о теории. Я понимаю, что ссылку нельзя привязать, не имея объекта привязки, и что ссылка не может быть переназначена. Вопрос заключается в резонности применения вариантов в конкретных ситуациях. То есть: когда лучше использовать 1-й вариант, а когда второй, и почему?
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38231134
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90когда лучше использовать 1-й вариант, а когда второй, и почему?

Если в качестве параметра предполагается передавать что угодно кроме переменной -
константу, выражение и т.п. - ссылка в пролёте.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38231149
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
есть такое дело.
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38231579
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAN90когда лучше использовать 1-й вариант, а когда второй, и почему?

Если в качестве параметра предполагается передавать что угодно кроме переменной -
константу, выражение и т.п. - ссылка в пролёте.


Указатель, собственно, так же в пролёте.

А вот с константной ссылкой уже легче -- компилятор когда-то может и создать для вызова временный объект.
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38231587
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90Спасибо за ответы, но: я специально подчеркнул, что речь идёт о стадии применения, а не о теории. Я понимаю, что ссылку нельзя привязать, не имея объекта привязки, и что ссылка не может быть переназначена. Вопрос заключается в резонности применения вариантов в конкретных ситуациях. То есть: когда лучше использовать 1-й вариант, а когда второй, и почему?

Если ты предполагаешь иногда НЕ передавать этот параметр, то нужно использовать указатель, а не ссылку.
Если предполагаешь не модифицировать само значение параметра, то нужно использовать константные ссылку или указатель.
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38231590
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕсли предполагаешь не модифицировать само значение параметра, то нужно
использовать константные ссылку или указатель.
При этом следует помнить, что "const int * i" и "int * const i" это сильно разные вещи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38232081
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivЕсли предполагаешь не модифицировать само значение параметра, то нужно
использовать константные ссылку или указатель.
При этом следует помнить, что "const int * i" и "int * const i" это сильно разные вещи.


А в чём разница?
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38232440
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90А в чём разница?
В том что именно является константой: данные или указатель.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38235202
AN90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAN90А в чём разница?
В том что именно является константой: данные или указатель.

То есть, "const int * i" - константная переменная, а "int * const i" - константный указатель?
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38235496
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AN90Dimitry Sibiryakovпропущено...

В том что именно является константой: данные или указатель.

То есть, "const int * i" - константная переменная, а "int * const i" - константный указатель?
Наоборот.
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38235515
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНаоборот.
Нет, именно так: указатель на константу и константа-указатель соответственно. В первом
случае i = x пройдёт, а *i = x обломится. Во втором - наоборот.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача параметров функции.
    #38235690
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кароче:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void foo() {
	const int * i1;
	int * const i2;

	int a =0;

	i1 = &a;
	i2 = &a;

	*i1 = 1;
	*i2 = 1;
}


$ gcc -c foo.c
foo.c: In function 'foo':
foo.c:8:2: error: assignment of read-only variable 'i2'
foo.c:10:2: error: assignment of read-only location '*i1'
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметров функции.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]