Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.90/41: Рейтинг темы: голосов - 41, средняя оценка - 4.90
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1

Как происходит возврат значения по ссылке?

08.03.2015, 18:19. Показов 10411. Ответов 88
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, распишите пожалуйста детально про то, как происходит возврат значения по ссылке.
Можно вот на этом примере:
C++
1
2
3
4
5
alpha& operator=(alpha& a) // перегружаемая операция =
{
   data = a.data;
   return *this;
}
Да и вобще, что есть ссылка? Можно ли ее считать саморазыменовывающимся указателем?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2015, 18:19
Ответы с готовыми решениями:

Возврат значения по ссылке
Долго гуглил, но что-то так и не понял. Почему слева от знака = может использоваться только функция, возвращающая ссылку?

Запутался и уже не понимаю как вообще может работать возврат объекта по ссылке
Здравствуйте, киберфорумчане. Сейчас читаю Г. Шилдта и в его книге рассказывается о побочных эффектах при передаче объектов в функцию и при...

Возврат по ссылке
Приветствую всех! Есть пример из книги Р. Лафоре "Объекто-ориентированное программирование в C++": #include <iostream> ...

88
41 / 41 / 26
Регистрация: 24.02.2015
Сообщений: 151
10.03.2015, 16:58
Студворк — интернет-сервис помощи студентам

Не по теме:


Если кому интересно посмотрел асм на gcc 4.8.2. В коде с++ 28 ссылок :


Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
    pushq   %rbp
    movq    %rsp, %rbp
    subq    $240, %rsp
    movl    $10, -228(%rbp)  // int i = 10
    leaq    -228(%rbp), %rax
    movq    %rax, -224(%rbp) //ссылка
    leaq    -228(%rbp), %rax
    movq    %rax, -216(%rbp) // ссылка
    leaq    -228(%rbp), %rax
    movq    %rax, -208(%rbp) // еще ссылка
    leaq    -228(%rbp), %rax
    movq    %rax, -200(%rbp) // ...
    leaq    -228(%rbp), %rax
    movq    %rax, -192(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -184(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -176(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -168(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -160(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -152(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -144(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -136(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -128(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -120(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -112(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -104(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -96(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -88(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -80(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -72(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -64(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -56(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -48(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -40(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -32(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -24(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -16(%rbp)
    leaq    -228(%rbp), %rax
    movq    %rax, -8(%rbp)
    movq    ext(%rip), %rax
    leaq    1(%rax), %rdx
    movq    %rdx, ext(%rip)
    movq    %rax, %rsi
    movl    $_ZSt4cout, %edi
    call    _ZNSolsEx
    movl    $_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, %esi
    movq    %rax, %rdi
    call    _ZNSolsEPFRSoS_E
    call    _Z4testv
    leave
    ret

Не по теме:


С ключом -O3 такого конечно нет

0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 17:01
Цитата Сообщение от hoggy Посмотреть сообщение
просто человек похоже не различает, где с++, а где компилятор
Просто человек уточняет, что
Цитата Сообщение от hoggy Посмотреть сообщение
Мы лишь создаем текстовую метку в исходном коде
не полностью отражает суть, так как "тектовая метка в исходном коде" может затронуть работу с памятью.

Добавлено через 1 минуту
Цитата Сообщение от MakeEasy Посмотреть сообщение
С ключом -O3 такого конечно нет
Это просто потому что инициализированные ссылки больше нигде не используются
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 17:10
Цитата Сообщение от Velesthau Посмотреть сообщение
А ты?
да.

Цитата Сообщение от Velesthau Посмотреть сообщение
Альтернативное имя может оказывать влияние на работу с памятью.
да, может. и что?

Цитата Сообщение от Velesthau Посмотреть сообщение
Здесь уже были примеры, когда это влияло на исполнение программы.
использование ссылок безусловно влияет на исполнение программы.

поведение программы никак не зависит от того, сделал ли inline компилятор, или не сделал.

и строго говоря, это справедливо не только в отношении ссылок,
а вообще: любая оптимизация не изменяет поведение программы, которое было описано в исходном коде.

и что?

или вы считаете, что если вдебаге компилятор своих палок на втыкал - это есть влияние ссылки на исполнение?
нет, мой дорогой, это влияние самого компиляторе в режиме "отладки".
ссылки здесь не причем.

Цитата Сообщение от Velesthau Посмотреть сообщение
Это говорит о твоей квалификации.
что тут у нас? похоже начинается драка?

Цитата Сообщение от Velesthau Посмотреть сообщение
Мда, вот что делает с людьми программирование под персоналки. Другого ничего в мире не видят.
я допускаю, что на каких нибудь микроконтроллерах могут экономить каждый байт.
только эта тема уже не имеет к ссылкам никакого отношения.
и обсуждать проблему экономии байтов мне не интересно.

Добавлено через 6 минут
Цитата Сообщение от Velesthau Посмотреть сообщение
не полностью отражает суть, так как "тектовая метка в исходном коде" может затронуть работу с памятью.
потому что вырвано из контекста:

Цитата Сообщение от hoggy Посмотреть сообщение
ref - это текстовая метка на самом деле, и не более того.
компилятор inline v по месту использования ref везде, где это возможно.
а возможно это везде, где не нужно делать копии.
и только там, где невозможно выполнить подстановку, он задействует механизм указателей.
например - если нужно сохранить копию ссылки как член класса,
или как аргумент функции (и то - не факт, что не сделает inline).
Тут вроде по-русски написано, что компиль может оформить ссылку через механизм указателей.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 17:15
Цитата Сообщение от hoggy Посмотреть сообщение
или вы считаете, что если вдебаге компилятор своих палок на втыкал - это есть влияние ссылки на исполнение?
Компилятор в дебаг-режиме ничего не втыкал. Я уже тут постил код с ссылками. В релиз-режиме он будет такой же.
Цитата Сообщение от hoggy Посмотреть сообщение
нет, мой дорогой, это влияние самого компиляторе в режиме "отладки".
Влияния режима отладки там нет.
Цитата Сообщение от hoggy Посмотреть сообщение
ссылки здесь не причем.
Этот код сформирован именно благодаря ссылкам.
Цитата Сообщение от hoggy Посмотреть сообщение
поведение программы никак не зависит от того, сделал ли inline компилятор, или не сделал.
Еще как зависит. Вплоть до вызова менджера памяти системы по исключительной ситуации при обращении к странице, которая пока не закоммичена для стека.

Добавлено через 3 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
ref - это текстовая метка на самом деле, и не более того.
"и не более того" тут лишнее. Без него будет нормально.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 17:15
Цитата Сообщение от Velesthau Посмотреть сообщение
Компилятор в дебаг-режиме ничего не втыкал. Я уже тут постил код с ссылками. В релиз-режиме он будет такой же.
DrOffset тоже постил.

Цитата Сообщение от Velesthau Посмотреть сообщение
Еще как зависит. Вплоть до вызова менджера памяти системы по исключительной ситуации при обращении к странице, которая пока не закоммичена для стека.
приведите код пример-иллюстрацию.
0
 Аватар для Voivoid
710 / 284 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
10.03.2015, 17:16
Цитата Сообщение от Velesthau Посмотреть сообщение
Я уже тут постил код с ссылками. В релиз-режиме он будет такой же.
Может стоит обновить компилятор до версии хотя бы 15 летней давности?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 17:18
Цитата Сообщение от Velesthau Посмотреть сообщение
"и не более того" тут лишнее. Без него будет нормально.
нет не будет.

ссылка - альтернативное имя объекта.
имена в исходном коде - просто текст.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 17:18

Не по теме:

Цитата Сообщение от Voivoid Посмотреть сообщение
Может стоит обновить компилятор до версии хотя бы 15 летней давности?
Да, пора бы уже :)



Добавлено через 20 секунд
Цитата Сообщение от hoggy Посмотреть сообщение
ссылка - альтернативное имя объекта.
имена в исходном коде - просто текст.
Да, ссылка - альтернативное имя. Все в исходном коде - просто текст.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 17:22
Цитата Сообщение от Voivoid Посмотреть сообщение
Может стоит обновить компилятор до версии хотя бы 15 летней давности?
если там микроконтроллеры - то с нормальным компилятором могут быть сложности...

Добавлено через 2 минуты
Цитата Сообщение от Velesthau Посмотреть сообщение
Все в исходном коде - просто текст.
имена детонируют объекты.
но только, если это не имена ссылок.
ссылки не детонируют объекты.

(речь именно о с++, а не о кухни компилятора)

вы не можете получить адрес ссылки,
просто потому что его не существует.

(то, что компиль может оформить ссылку через указатель - монопенисуально,
потому что не стабильно. и к правилам языка отношения не имеет).
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 17:25
Цитата Сообщение от hoggy Посмотреть сообщение
приведите код пример-иллюстрацию.
Я тебе в няньки не записывался, чтобы тут примеры постоянно кидать. Сам почитай, как стек, например, в винде работает, и для чего guard pages.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 17:27
Цитата Сообщение от Velesthau Посмотреть сообщение
Я тебе в няньки не записывался, чтобы тут примеры постоянно кидать. Сам почитай,
как стек, например, в винде работает, и для чего guard pages.
человек который не в состоянии пояснить свою позицию - балабол.
а речи балаболов ценности не представляют.
0
 Аватар для Voivoid
710 / 284 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
10.03.2015, 17:31
Ну кстати, лол, я где-то тут пару дней назад про guard pages стэка писал
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 17:42
Цитата Сообщение от hoggy Посмотреть сообщение
имена детонируют объекты.
Нет такого в стандарте. Имена функций тоже существуют.
Цитата Сообщение от hoggy Посмотреть сообщение
(речь именно о с++, а не о кухни компилятора)
Именно С++ указывает, что ссылками память может быть использована, а не компилятор.

Добавлено через 35 секунд
Цитата Сообщение от hoggy Посмотреть сообщение
человек который не в состоянии пояснить свою позицию - балабол.
Человек, которому лень разобраться в вопросе и он всегда просит других что-то для себя сделать - дурак.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
а речи балаболов ценности не представляют.
Речи дураков - тоже. Я не собираюсь тратить свое время на приведение тебе примеров на каждый чих. Если ты что-то не читал, или не знаешь, то я не виноват в этом. И не моя задача исправлять это. Ссылки я тебе дам, читай. Напиши и проверь.

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от Voivoid Посмотреть сообщение
Ну кстати, лол, я где-то тут пару дней назад про guard pages стэка писал
Я как-то упустил это, видимо :)

0
 Аватар для Voivoid
710 / 284 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
10.03.2015, 17:44
Цитата Сообщение от Velesthau Посмотреть сообщение
Я как-то упустил это, видимо

Не по теме:

Ну, не в этой теме, но где-то в этом разделе

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 17:47
Цитата Сообщение от Velesthau Посмотреть сообщение
Нет такого в стандарте. Имена функций тоже существуют.
это была цитата Страуструпа из его первой книги.

где он кстати черным по белому пишет,
что имена детонируют объекты, метки, функци...

Цитата Сообщение от Velesthau Посмотреть сообщение
Именно С++ указывает, что ссылками память может быть использована
он этого не указывает.

Цитата Сообщение от Voivoid Посмотреть сообщение
8.3.2 4 It is unspecified whether or not a reference requires storage.
Что означает - на усмотрение компилятора.

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

могу показать как.

вот только что из этого следует?
вы сказать то что хотели?

Цитата Сообщение от Velesthau Посмотреть сообщение
Человек, которому лень разобраться в вопросе и он всегда просит других что-то для себя сделать - дурак.
согласен.
человек которому лень, и который всегда.

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

диалог в таком ключе - бесполезен.

Цитата Сообщение от Velesthau Посмотреть сообщение
Речи дураков - тоже. Я не собираюсь тратить свое время на приведение тебе примеров на каждый чих. Если у тебя такой уровень знаний, то я не виноват в этом. Ссылки я тебе дам, читай. Напиши и проверь.
когда мне становить лень продолжать не интересный мне диалог, я так и говорю: скучно.

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

вы мне больше не интересны.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 18:02
Цитата Сообщение от hoggy Посмотреть сообщение
это была цитата Страуструпа из его первой книги.
где он кстати черным по белому пишет,
что имена детонируют объекты, метки, функци...
Страуструп пишет, как хочет.
Цитата Сообщение от hoggy Посмотреть сообщение
Что означает - на усмотрение компилятора.
Что означает, что это не "просто текстовая метка в исходном код и не более того".

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
человек которому лень, и который всегда.
Учитывая, что по твоей просьбе, я тебе уже привел один пример, и ты просишь меня привести еще, этого достаточно, чтобы понять, что ты за человек.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
на просьбу уточнить момент начали слюнками брызгать
Не люблю наглых ленивых людей. Им лень разобраться в вопросе и они всегда просят приводить им примеры, и еще, и еще. Они не достойны того, чтобы на них даже слюну тратили.

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
вы сказать то что хотели?
Хм... Я уже несколько раз говорил:
ref - это текстовая метка на самом деле, и не более того.
Не верно. "Текстовая метка...и не более того" намекает на то, что она оказывает влияние на исходный код, а не на итоговый сгенерированный. Но это не так.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 18:03
Цитата Сообщение от Velesthau Посмотреть сообщение
Не люблю наглых ленивых людей. Им лень разобраться в вопросе и они всегда просят приводить им примеры, и еще, и еще. Они не достойны того, чтобы на них даже слюну тратили.
я все понимаю: есть такие люди, которые собственные тезисы не могут ни объяснить толком, ни обосновать.
и начинают какашками кидаться.

вы главное желчью не подавитесь.
и не пишите мне больше ничего.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 18:09
Цитата Сообщение от hoggy Посмотреть сообщение
есть такие люди, которые собственные тезисы не могут ни объяснить толком, ни обосновать.
Я уже все объяснил: есть стек, в винде он при расширении затронет страницы, которые вызовут исключение и обращение к менджеру памяти для того, чтобы дать доступ к странице, которая вызвала исключение. Так как ссылки могу занимать сторейдж в памяти, они могут все это сделать. Есть guard pages, есть ссылки на стеке, есть мендежер памяти. Хочешь увидеть воочию - напиши пример в пару строк и в WinDbg отладь - увидишь.
Цитата Сообщение от hoggy Посмотреть сообщение
вы главное желчью не подавитесь.
Меня это не беспокоит.
Цитата Сообщение от hoggy Посмотреть сообщение
и не пишите мне больше ничего.
Это не твоя тема, закрой страницу и не читай.
0
 Аватар для Voivoid
710 / 284 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
10.03.2015, 18:28
Цитата Сообщение от Velesthau Посмотреть сообщение
Так как ссылки могу занимать сторейдж в памяти, они могут все это сделать.
Хех, это звучит примерно как: "Все, кто когда-либо в жизни ели огурцы - уже умерли или умрут". Если используется косвенная адресация, не важно при помощи ссылок-ли или же указателей, то очевидно, что потребуется какая-то дополнительная сущность. Зато там, где без этого можно обойтись ( в том числе и в inline функциях ) ссылки всегда оптимизируются в 0. Унылые компиляторы которые даже такую элементарную вещь не могут сделать - не нужны. ( а байтослесари должны страдать ).
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
10.03.2015, 21:17
Цитата Сообщение от hoggy Посмотреть сообщение
Если бы утверждение: "ссылка - это указатель с авторазыменовыванием" было бы верным,
тогда её размер так же был бы равен sizeof(void*)
Однако:
Код C++
C++
1
2
3
4
5
int ar[20];
auto& ref = ar;
std::cout<<"size of p = "<< sizeof(ar)<<std::endl;
std::cout<<"size of ref = "<< sizeof(ref)<<std::endl;
std::cout<<"size of void* = "<< sizeof(void*)<<std::endl;
Я не понял этого довода.
Почему если речь про саморазыменование, то в первой строчке адрес берется у указателя как у сущности "указатель", а не как у сущности "разыменованный указатель".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2015, 21:17

Возврат по ссылке
Вычитал давно еще, что если возвращать статический обьект из метода и присвоить его констатной ссылке то он продолжить жить пока видима эта...

Возврат по константой ссылке
Всем добрый день! И снова я с глупыми вопросами, простите заранее :-const int&amp; mysum(int&amp; num, int incr = 0) { num += incr;...

Наследование, возврат по ссылке..
Есть такое :wall:Я не могу понять, как реализовать :help: :wall:Подсказывать, как это можно сделать. :help: Вот мой #include...

Возврат результата из функции через параметр по ссылке
Здравствуйте уважаемый форумчане! Подскажите, как вернуть результат работы функции по ссылке? Как передавать параметр по ссылке в функцию я...

Как происходит присвоение значения переменной?
Здравствуйте. Какие способы присвоения значения существуют? Расскажите пожалуйста, как присваиваются значения при присвоении из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
BitTorrent (версия 7.11 English) и Меню Настройки
russiannick 15.11.2026
Пункты, отвечающие за отключение обновлений в BitTorrent версии 7. 11 (английской) Options Preferences General Language
Транслитерация текста с кириллицы на латиницу (вариант №4)
Maks 15.11.2026
Что-то я перемудрил с предыдущими версиями, в этот раз сделал всё проще, обратившись к функции "СтрокаЛатиницей" из типового общего модуля "СтроковыеФункцииКлиент". В данной функции нет апострофов,. . .
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы. Карта этого меню приложена ниже. Нужный пункт выделен красным. Сервис Настройки Поведение
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru