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

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

08.03.2015, 18:19. Показов 9960. Ответов 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
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 12:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Tulosba Посмотреть сообщение
Я задал прямой вопрос, на который можно ответить "да" или "нет", а не гонять кругами по другим сообщениям, выискивая какую-то дополнительную связь.

Не по теме:

да, буду.

в своем вопрос в #5 ТС привел случай, где создается объект по значению.

0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
10.03.2015, 12:59
Цитата Сообщение от hoggy Посмотреть сообщение
Получил люлей за свою первую книжку "её нефига не осиливают", и выпустил свою "практику",
Прата
C++
1
2
3
ссылка во многом подобна указателю в замаскированной нотации, при которой наличие 
операции разыменования *предполагается неявно. И, фактически, это в какой-то степени
именно то, чем является ссылка.
Понаписали книжек неучи проклятые

Добавлено через 14 минут
Конечно нельзя считать ее указателем как таковым и утверждать, что она указатель.
Ссылка - это ссылка.

И чем же это для своего удобства мешает считать ее саморазыменовывающимся указателем когда
Цитата Сообщение от daslex Посмотреть сообщение
наличие операции разыменования *предполагается неявно

Не по теме:

Вы черезчур категоричны

.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 12:59
Цитата Сообщение от daslex Посмотреть сообщение
Понаписали книжек неучи проклятые
будучи ещё новичком, я реально,
поначитавшись вот таких допущений два дня пытался похакать адрес ссылки.
пока до меня не дошло, что нельзя получить то, чего в принципе не существует.

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

или можно похакать аргументы функции и вытащить адрес (только это не всегда срабатывает)
но опять же - аргумент функции - это уже копия ссылки.

я ж хотел хакнуть оригинал:

C++
1
int& ref = v; //<--- адрес ref
достать нельзя просто потому что его не существует.

ref - это текстовая метка на самом деле, и не более того.

компилятор inline v по месту использования ref везде, где это возможно.
а возможно это везде, где не нужно делать копии.

и только там, где невозможно выполнить подстановку, он задействует механизм указателей.
например - если нужно сохранить копию ссылки как член класса,
или как аргумент функции (и то - не факт, что не сделает inline).

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

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

а так вообще, вопрос на собеседовании:
перечислите типы языка с++, которые не могут иметь собственных объектов.

Кликните здесь для просмотра всего текста
ссылки и void
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
10.03.2015, 13:07
Не буду спорить. Поверю на слово. Я ассемблером не владею, чтобы смотреть что где и когда существует.

Но возьмем пример
int *N=new int[100];
Давайте узнаем количество элементов в N c помощью sizeof. Оно как бы есть, но мы его увидеть никак не можем., как бы мы ни старались. Существует, достать нельзя.
0
10.03.2015, 13:12

Не по теме:

Цитата Сообщение от hoggy Посмотреть сообщение
да, буду.
Честное слово, не понимаю твоего рвения всегда и везде казаться правым, даже когда очевидно, что неправ.
Мне почему-то сразу вспоминаются школьные "отличники", которые получив "4" начинают заламывать руки, доказывая окружающим всеми правдами и неправдами, что достойны только высшей оценки. Хотя дело всего лишь в том, что никто не идеален. Надеюсь, без обид. :senor:

0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 13:22
Цитата Сообщение от hoggy Посмотреть сообщение
ref - это текстовая метка на самом деле, и не более того.
Цитата Сообщение от daslex Посмотреть сообщение
Я ассемблером не владею, чтобы смотреть что где и когда существует.
Это можно проверить без ассемблера. Бесконечно рекурсивная функция упадет от переполнения стека. Если у нее есть внутренние переменные, то они тоже занимают место на стеке и она упадет еще раньше. Если память на стеке не занимают переменные, то продержится дольше. Вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
long long ext = 0;
 
void test()
{
    int i = 10;
    int &a = i, &b = i, &c = i, &d=i, &e=i, &f=i, &g = i;
    std::cout << ext++ << std::endl;
    test();
}
 
int main()
{
    test();
}
На моей системе (+ дефолтные настройки компилятора, отключена оптимизация) - 3217 вызовов. Комментируем
C++
1
// int &a = i, &b = i, &c = i, &d=i, &e=i, &f=i, &g = i;
4383 вызовов.

Без ассемблера понятно, что занимает место в памяти. Добавишь еще ссылок - стек переполнится быстрее.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 13:28
Цитата Сообщение от daslex Посмотреть сообщение
int *N=new int[100];
Давайте узнаем количество элементов в N c помощью sizeof. Оно как бы есть, но мы его увидеть никак не можем., как бы мы ни старались. Существует, достать нельзя.
Дело в том, что sizeof работает с типами языка с++

Однако в этой записи тип данных "массив" нигде не фигурирует.
Следовательно использовать sizeof здесь уже не получится.

В правой части - мы создаем массив объектов в динамической памяти.
(Не путать с типом данных "массив" языка!).

В левой - указатель, который так же не является массивом.

Типа данных "массив" нигде не фигурирует.

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

например так:
https://msdn.microsoft.com/ru-... .110).aspx

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

Цитата Сообщение от Tulosba Посмотреть сообщение
Честное слово, не понимаю твоего рвения всегда и везде казаться правым, даже когда очевидно, что неправ.
Мне почему-то сразу вспоминаются школьные "отличники", которые получив "4" начинают заламывать руки, доказывая окружающим всеми правдами и неправдами, что достойны только высшей оценки. Хотя дело всего лишь в том, что никто не идеален. Надеюсь, без обид.

Не по теме:

У меня нет такого рвения.
Более того - это скучно.

Мне интересно узнавать новое.
Если я узнал что-то, что изменило мои представления о мире - значит в чем то я оказался не прав.
Но это так же означает, что я развиваюсь.
Развиваться - интересно.
Быть всегда правым - не интересно.



Добавлено через 2 минуты
Цитата Сообщение от Velesthau Посмотреть сообщение
Это можно проверить без ассемблера. Бесконечно рекурсивная функция упадет от переполнения стека.
она в любом случае упадет. даже если функция - пустая.

http://rextester.com/TCU56692

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Title of this code
//Compiler Version 18.00.21005.1 for x86
 
#include <iostream>
 
 
void foo()
{
    foo();
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
    foo();
}
а значит не важно - есть там ссылки, или нет.
а значит вы никак не проверите таким образом свойства ссылок.

-----------

насчет количество итераций...
нужно смотреть ассм выхлоп.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 13:30
Цитата Сообщение от hoggy Посмотреть сообщение
она в любом случае упадет. даже если функция - пустая.
Логично.
Цитата Сообщение от hoggy Посмотреть сообщение
а значит не важно - есть там ссылки, или нет.
Важно. При наличии переменных внутри функции она упадет быстрее, так как они находятся на стеке и занимают память. При наличии большого объекта внутри функции, она может запуститься вообще 1 раз. Или 0.
Ссылки находятся на стеке, а не "просто текстовые метки" в коде программы. Выше - пример, который это демонстриурет.
Цитата Сообщение от hoggy Посмотреть сообщение
а значит вы никак не проверите таким образом свойства ссылок.
Я уже проверил.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
10.03.2015, 13:35
Цитата Сообщение от hoggy Посмотреть сообщение
она в любом случае упадет
Ну-у-у, я бы не сказал, что совсем уж в любом Более-менее современные компиляторы умеют выполнять оптимизация хвостовой рекурсии, так что получится просто бесконечный цикл
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
10.03.2015, 13:37
ну, не только с типами. Еще с объектами.(не изменяйте своей категоричности)
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
10.03.2015, 13:39
Цитата Сообщение от Velesthau Посмотреть сообщение
Важно. При наличии переменных внутри функции она упадет быстрее, так как они находятся на стеке и занимают память
А если собирать с включенной оптимизацией?

А вообще конечно лол, почитать стандарт языка? Не-е-е, лучше будем делать какие-нибудь сомнительные опыты
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
10.03.2015, 13:51
Цитата Сообщение от Velesthau Посмотреть сообщение
Важно. При наличии переменных внутри функции она упадет быстрее, так как они находятся на стеке и занимают память.
Вообще то раньше упадёт проект, которому не где хранить локальные данные. До создания стека он просто не доползёт.

Добавлено через 5 минут
Цитата Сообщение от Velesthau Посмотреть сообщение
Ссылки находятся на стеке, а не "просто текстовые метки" в коде программы. Выше - пример, который это демонстриурет.
Во-первых какие ссылки? Ссылки на локальные переменные? Их знает только компилятор, а код для
C++
1
2
3
4
5
6
7
8
int f(int &x; int &y)
{
 int t1;
 int &t2=t;1
 t1=x;
 x=y;
 y=t2;
}
и для
C++
1
2
3
4
5
6
7
int f(int &x; int &y)
{
 int t;
 t=x;
 x=y;
 y=t;
}
совпадает до байта. Или переданные по ссылкам параметры? Так эти ссылки занимают ровно столько же, как и указатели, переменные же, в том числе, объекты, переданные по значению, хранятся на стеке целиком. И если это не чары, булы и короткие инты, то места они занимают как минимум столько же, а могут и больше.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
10.03.2015, 14:10
Коли уж пошла такая пьянка, прошу объяснить
C++
1
2
3
int && x=10;
  x=100;
  cout<<x;
Ссылка есть ссылка. тут rvalue, там lvalue

Цитата Сообщение от hoggy Посмотреть сообщение
у ссылки есть объект,
который хранит адрес того объекта, на который она ссылается
???
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 14:42
Цитата Сообщение от Velesthau Посмотреть сообщение
Я уже проверил.
я тоже проверил:

C++
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
#include <windows.h>
#include <iostream>
#include <cstdint>
 
uint64_t gDepth;
 
#define ACTIVATE_MANY_REFERENCES
 
void StackOverflow()
{
    char blockdata[10000];
 
    int i = 10;
    int& ref = i;
 
 
    #ifdef ACTIVATE_MANY_REFERENCES
    int &r1  = i, &r2  = i, &r3  = i, &r4  = i, &r5  = i;
    int &r6  = i, &r7  = i, &r8  = i, &r9  = i, &r10 = i;
    int &r11 = i, &r12 = i, &r13 = i, &r14 = i, &r15 = i;
    #endif
 
    (void)blockdata;
 
    ++gDepth;
    StackOverflow();
}
 
int main()
{
    __try
    {
        StackOverflow();
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
        std::cout << "exception " << _exception_code()<< " "
            << "(StackOverflow), gDepth = " << gDepth
            << std::endl;
    }
 
    return 0;
}
 
//вывод:
 
//Visual C++ Compiler Nov 2013 CTP (CTP_Nov2013)
 
//debug-32 
//without ACTIVATE_MANY_REFERENCES
//Exception handler C00000FD : (StackOverflow), gDepth = 102
//иногда (редко) показывал 103
 
//debug-32 
//with ACTIVATE_MANY_REFERENCES
//Exception handler C00000FD : (StackOverflow), gDepth = 102
//иногда (редко) показывал 103
 
// релизную версию я так и не дождался
// (через 15 минут ожидания мне это надоело)
Добавлено через 1 минуту
Цитата Сообщение от Voivoid Посмотреть сообщение
Ну-у-у, я бы не сказал, что совсем уж в любом Более-менее современные компиляторы умеют выполнять оптимизация хвостовой рекурсии, так что получится просто бесконечный цикл
значит не зря я через 15 минут ожиданий бросил это глупое занятие

Добавлено через 27 минут
Цитата Сообщение от daslex Посмотреть сообщение
ну, не только с типами. Еще с объектами.(не изменяйте своей категоричности)
это кстати, верное замечание.
известный факт: размер любого указателя равен sizeof(void*)

что будет если мы возьмем размер объекта указательного типа?

int* p = v;
std::cout<<"size of p = "<< sizeof(p)<<std::endl;
std::cout<<"size of void* = "<< sizeof(void*)<<std::endl;

Если бы утверждение: "ссылка - это указатель с авторазыменовыванием" было бы верным,
тогда её размер так же был бы равен sizeof(void*)

Однако:

C++
1
2
3
4
5
6
7
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;
Концептуальное отличие ссылки от указателя - "ссылка - псевдоним объекта",
все операции над ссылкой есть операции над оригинальным объектом.

Мы можем узнать размер обычного сишного массива.
А значит можем узнать его и по ссылке.

Массивы нельзя передавать в функции по значению.
Либо по ссылке, либо по указателю

Однако указатель "забывает" на что он на самом деле указывает.

А вот ссылка - никогда.

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

C++
1
2
3
template<size_t N>
void foo( int (&ar)[N] )  //<--- передавать количество элементов не нужно
{... }           //оно будет выведено автоматически
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 14:48
Цитата Сообщение от Voivoid Посмотреть сообщение
А если собирать с включенной оптимизацией?
Не имеет значения.
Цитата Сообщение от Voivoid Посмотреть сообщение
А вообще конечно лол, почитать стандарт языка? Не-е-е, лучше будем делать какие-нибудь сомнительные опыты
Это сомнительно только для тех, кто не знают, как работает стек.
Цитата Сообщение от hoggy Посмотреть сообщение
я тоже проверил:
Хреново проверил.
Цитата Сообщение от hoggy Посмотреть сообщение
char blockdata[10000];
Делает так, что разницу ты не заметишь, так как стек занят массивом в большинстве своем, а не ссылками. Убирай этот массив и выложи сюда результаты без оптимизации.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
10.03.2015, 14:50
Цитата Сообщение от Velesthau Посмотреть сообщение
Не имеет значения.
Какой компилятор? Че-нить типа turbo c++ 2.0 ?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.03.2015, 14:52
Цитата Сообщение от Velesthau Посмотреть сообщение
Убирай этот массив и выложи сюда результаты без оптимизации.
результат без оптимизации - хреновый результат,
поскольку в дебаге компилятор может понапихать любой своей отсибятины из соображений безопасности.

и что бы понять что есть что нужно смотреть ассм.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 14:58
Твой же пример с ссылками:
gDepth = 2487
Без ссылок:
gDepth = 4387

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

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

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

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

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

и что это нам даст? НИ-ЧЕ-ГО.

ваш эксперимент ничего не показывает.


В релизе оно вообще от переполнения стека не падает.
И что это значит?
Да ничего это не значит, кроме того,
что в этом конкретном случае компиль соптимизировал рекурсию.
0
529 / 432 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
10.03.2015, 14:59
При оптимизации компилятор может убрать тебе неиспользуемую переменную. Теперь я могу утверждать, что любая переменная не существует в памяти и просто метка текстовая? Логический бред.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.03.2015, 14:59

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru