Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
2 / 2 / 0
Регистрация: 24.11.2016
Сообщений: 77

Использование ссылок и обычных имен переменных

08.07.2017, 23:26. Показов 6505. Ответов 82
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, у меня такой вопрос. Может быть он покажется довольно неинтересным вам, но мне просто надо понять кое-что.
Ссылка - это дополнительное имя для объекта. Имя объекта ссылается на его адрес.

Я правильно понимаю, что когда мы обращаемся к имени ссылки сначала мы получаем ее адрес, на который ссылается
ссылка (содержащийся в оригинальном имени переменной), а далее значение? А имя переменной также ссылается на некую область памяти, только вот при обращении к ней, мы сразу получаем конкретно значение?

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.07.2017, 23:26
Ответы с готовыми решениями:

Использование имен предопределенных объектов в качестве имен переменных
Есть код: #include <iostream> using namespace std; void func() { int cout; cout <<cout <<endl; }

Использование переменных вместо имен таблицы и полей в SQL-запросах
что-то у меня ругается на подобную запись, пишет: 'неправильный синтаксис около конструкции "KLIENTS"' где-то я не так пишу: ...

Использование длинных имен переменных увеличивает вес файла с программой?
Использование длинных имен переменных увеличивает вес файла с программой?

82
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
19.07.2017, 13:31
Студворк — интернет-сервис помощи студентам
daun-autist, а прятаться-то зачем? Боязнь ссылок-указателей, обычно, излечима. В этой теме, в частности нет ни одного утверждения о том, что ссылка, это указатель или наоборот. Но паранойя есть.
Сказано, не более, чем сказано у B.S. Для особо понятливых B.S. здесь это не bulll shit а аббревиатура имени и фамилии. Не перепутайте снова.
Отписываюсь.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
19.07.2017, 14:16
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это мелковато.
Твой же код еще меньше.
И вообще делает не то.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Опять хитровыдуманное правило, которое можно реализовать под капотом.
С указателями нельзя. А под капотом и указателей не бывает.
Мой код держит живым временный объект, а не статический,
который и так будет жить всю программу (почти).
GbaLog-, это вообще не то и не о том.

Не по теме:

Цитата Сообщение от daun-autist Посмотреть сообщение
Не знаю даже, кто хуже
Массиваторы, имхо. Там совсем всё плохо. :)

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.07.2017, 00:54
Цитата Сообщение от Croessmah Посмотреть сообщение
С указателями нельзя. А под капотом и указателей не бывает.
Мой код держит живым временный объект, а не статический,
который и так будет жить всю программу (почти).
Потому что:
Цитата Сообщение от Croessmah Посмотреть сообщение
делает не то
естественно. Почему он должен делать то? Он показывает, что если хочется что-то хитро выдумать, то это не проблема. Присвоить указателю статический объект, типа массив, это нормально? Это тяжелое наследие С. Конечно. Но в широком смысле, это то же "хотелка" и она именно
Цитата Сообщение от Croessmah Посмотреть сообщение
С указателями нельзя
показывает, что можно. С любым типом можно придумать что угодно. Что и произошло. Две подкатегории типов и целая жменя ссылок. Что касается массированного массирования массивов, то они тут не при чём. Массив указателей можно создать легко. Массив ссылок нельзя создать. Ссылку нельзя объявить и потом присвоить. Хотя нужно-то было бы родить для неё операцию переустановки на новый объект. Например паскалевское := подошло бы, для синтаксического отражения. А доступ к объекту на запись, - простым =. И был бы вменяемый тип.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
20.07.2017, 05:50
Цитата Сообщение от IGPIGP Посмотреть сообщение
Присвоить указателю статический объект, типа массив, это нормально?
Нормально. У нас же разложение имеется.
А вот продлите время жизни временного объекта с помощью указателя.
Вы же заявили что можно. Вперед.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Он показывает, что если хочется что-то хитро выдумать, то это не проблема.
Странное заявление.
- Давайте сделаем автомобиль.
- Мы всё сделали.
- Но это же молоток.
- Но он показывает, что если хочется что-то хитро выдумать, то это не проблема.

В общем, гоните Вы, простите за мой французский.
Цитата Сообщение от IGPIGP Посмотреть сообщение
показывает, что можно.
Ну покажите же как можно.
Ваш код вообще не о том.
Диалог выше как раз о Вашем коде.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
20.07.2017, 06:52
Цитата Сообщение от Croessmah Посмотреть сообщение
А вот продлите время жизни временного объекта с помощью указателя.
Мне вот интересно, хоть кто-то на практике продлевает жизнь временного объекта с помощью ссылки? Или это нужно только для "а вот у ссылки есть, а у указателя нету!"?
Ну серьезно, того же эффекта можно достигнуть просто убрав амперсанд.
2
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
20.07.2017, 07:43
Цитата Сообщение от Renji Посмотреть сообщение
хоть кто-то на практике продлевает жизнь временного объекта с помощью ссылки?
да постоянно, как бы, если вы от таком:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
void foo(const std::string & s)
{
    //do smth
}
 
int main()
{
    foo("ololo");
    
    std::cout << "Hello, world!\n";
}
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.07.2017, 08:20
Цитата Сообщение от Croessmah Посмотреть сообщение
Нормально. У нас же разложение имеется.
Указатель это указатель, а массив это массив. Однако существует (испокон веков) практика для char присваивать массив указателю. Само по себе это не так уж и плохо. Бред как бред. По настоящему плохо, влияние этого факта на мозг. То есть позанимавшись С++ достаточно долго, человек начинает привыкать к этому как к норме.

Цитата Сообщение от Croessmah Посмотреть сообщение
А вот продлите время жизни временного объекта с помощью указателя.
указатель не умеет, да. И на стенку писать тоже. Непонятно, кстати, почему ссылку при её колченогости не наделили такой способностью.
Цитата Сообщение от Croessmah Посмотреть сообщение
Странное заявление.
- Давайте сделаем автомобиль.
- Мы всё сделали.
- Но это же молоток.
- Но он показывает, что если хочется что-то хитро выдумать, то это не проблема.
Вот это, особенно хорошо. Делали авто а получили молоток... Это хорошее подтверждение предыдущего текста. Если указателю можно присвоить молоток, то его можно присвоить чему угодно.
Цитата Сообщение от Croessmah Посмотреть сообщение
Ну покажите же как можно.
Вот это твоё жду, просто восхищает. Я привёл цитату по поводу того, что ты назвал "глупостью" и уже не жду ни извинений ни хотя бы признания того, что ты считал это "глупостью" и был готов всенародно признать глупостью в любой момент всю свою жизнь. И оказалось, что просто говорил и думал не то, что нужно. Но, заметь, я долго и терпеливо ждал какого-то признания ошибки. А вот это твоё (победоносное) - ЖДУ, с третьего раза и послужило желанием сказать, что и я жду. Где "глупость"?
Цитата Сообщение от Croessmah Посмотреть сообщение
Диалог выше как раз о Вашем коде.
Нет. Диалог о другом.
Цитата Сообщение от Renji Посмотреть сообщение
Мне вот интересно, хоть кто-то на практике продлевает жизнь временного объекта с помощью ссылки? Или это нужно только для "а вот у ссылки есть, а у указателя нету!"?
Можно бы использовать промежуточную переменную и забыть. Но... Порождён гигантской силы сайд-эффект! И он поднят на щит как аргумент.
А ведь B.S. печётся не только о безопасности (невозможность создать не инициализированную ссылку). Он просит не передавать не констнантных ссылок в функции. Передавайте указатели, говорит он. Тут всё дело в читаемости и сайд эффекте. Изменение по ссылке, это сайд-эффект, а в месте вызова указатель показывает, что он может изменить значение "своего" объекта. А ссылка ведь вызывается не на ссылке (у-упс!), она вызывается на типе значения... и никто не знает получит функция копию или под капотом (то чего не бывает) указатель ссылку.
Причём, передавать большие объекты , - векторы например, следовательно нужно либо по константным ссылкам, либо по указателям. Класс! Но не слушаются его. Почему-то. Передают по обычным.
А вот фича с продлением жизни временного объекта, как сайд-эффект это просто необходимая вещь. Тут читаемость побоку. Я рад, что кроме данной возможности аргументов нет.
Массивы ссылок, и ссылки как полноценный тип с раздельным объявлением и инициализацией остаются как и "глупость" без ответа. Боремся с инакомыслием? Не удивительно.

Добавлено через 5 минут
Цитата Сообщение от GbaLog- Посмотреть сообщение
да постоянно, как бы, если вы от таком:
В Вашем примере достаточно неконстантного(!) указателя на char. Вы правильно поняли как связан мой ответ для указателей на данное заявление Croessmah, Правда оно катит только для char*, но было бы весело, если бы любой константный указатель можно было бы инициализировать константой (времени компиляции, конечно) данного типа. Всего-то делов, - всем статическую память и дело в шляпе. Молотки и автомобили будут неотличимы.
0
Заблокирован
20.07.2017, 10:01
Цитата Сообщение от GbaLog- Посмотреть сообщение
да постоянно, как бы, если вы от таком:
Где тут продление жизни? Временный объект типа std::string сдыхает после окончания вычисления строки 10.

Продление жизни — это когда временный объект, создаваемый при вычислении выражения, не уничтожается по окончании вычисления выражения (достижении точки с запятой), а продолжает жить дальше. Типичный пример — возвращаемый из функции по значению объект, привязываемый к ссылке. Или привязка prvalue к ссылке (const int& ri = 5;).

Добавлено через 1 минуту
Цитата Сообщение от IGPIGP Посмотреть сообщение
В Вашем примере достаточно неконстантного(!) указателя на char.
Нет, нужен константный.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.07.2017, 11:06
Цитата Сообщение от daun-autist Посмотреть сообщение
Нет, нужен константный.
Да, не вгляделся, что там string& . Я имел ввиду нечто вроде:
C++
1
2
3
4
5
6
7
8
void foo(char * str){
cout<<str<<endl;
}
 
int main(int argc, char* argv[])
{
    
foo("ololo!");//c-str литерал имеет тип const char[]
0
Заблокирован
20.07.2017, 11:15
IGPIGP, я понял, что ты имел в виду. Без const работает только в MSVC, это нестандартное расширение.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.07.2017, 12:11
Цитата Сообщение от daun-autist Посмотреть сообщение
GPIGP, я понял, что ты имел в виду.
Я рад.
Цитата Сообщение от daun-autist Посмотреть сообщение
Без const работает только в MSVC, это нестандартное расширение.
Н-нет. Нестандартное "сужение", это если где-то не работает.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
20.07.2017, 15:43
Renji, а если нет конструктора копирования?
GbaLog-, в Вашем примере нет того, о чем мы говорим.
IGPIGP, в Вашем примере нет того, о чем Вам пишут. Вы какую-то дичь пишите, выдавая свои фантазии за истину. Уже признали что указатели не могут всего что могут ссылки, хотя до этого практически лбом бились, доказывая обратное.
Идем дальше и тоже с временным объектом. Возьмите адрес временного объекта без proxy-функции. Например,
C++
1
2
3
4
5
void f1(const Some *) {}
void f2(const Some &){}
//...
f1(&Some{});//фигу
f2(Some{});//норм
Как напишите, двинемся дальше в сторону различий.

IGPIGP, это именно расширение. Присваивание строкового литерала указателю не на константу запрещен стандартом уже давно.
C++
1
foo("ololo!");//c-str литерал имеет тип const char[]
Игорь, типом литерала этого будет const char[7], и это не тоже самое, что const char[].
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
20.07.2017, 16:52
Цитата Сообщение от Croessmah Посмотреть сообщение
Renji, а если нет конструктора копирования?
То компиляция упадет где-то в районе return temporaryObject.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
20.07.2017, 16:58
Renji, конструктор копий может быть просто закрыт, а не удален. Для внешнего кода конструктор копирования использовать нельзя - недоступен, но для самого класса и друзей - пожалуйста.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
20.07.2017, 17:03
Цитата Сообщение от Croessmah Посмотреть сообщение
Renji, да ладно? Конструктор копий может быть просто закрыт, а не удален. Для внешнего кода конструктор копирования использовать нельзя - недоступен, но для самого класса и друзей - пожалуйста.
И при этом во внешний мир торчит функция возвращающая объект класса, а не ссылку на него? Возвращаемся к исходному вопросу - на практике кто-то так делает?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
20.07.2017, 17:20
Renji,
C++
1
2
3
4
5
6
7
template<typename F>
void foo(F f)
{
   const auto &r = f();//не важно, может ли возвращаемый объект перемещаться/копироваться в данном контексте
   r.action1();
   r.action2();
}
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
20.07.2017, 17:42
Цитата Сообщение от Croessmah Посмотреть сообщение
не важно, может ли возвращаемый объект перемещаться/копироваться в данном контексте
Зато, в этом контексте становится важно являются ли action1 и action2 константными методами. Причем, с чего вдруг на функтор накладываются подобные ограничения - решительно непонятно. Я повторюсь, на практике такое используется?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
20.07.2017, 17:53
Renji, это пример. Можно и от константности избавиться без проблем.
И так всё с телефона пишу, задолбали уже своим примером.
Ну не могу я рассписать всё, не удобно это.
Каждое смещение курсора - боль.
Нужно помогать человекам, стараться додумать.
В своём проекте использую в ряде случаев.
Увижу в чужом коде, покажу. Я ж не могу весь код,
который когда-либо видел, помнить наизусть.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
20.07.2017, 19:58
Цитата Сообщение от Croessmah Посмотреть сообщение
Вы какую-то дичь пишите, выдавая свои фантазии за истину.
Цитата Сообщение от Croessmah Посмотреть сообщение
хотя до этого практически лбом бились, доказывая обратное
Цитата Сообщение от Croessmah Посмотреть сообщение
Возьмите адрес временного объекта
Я писал, что указатель нормальный тип. Он не может творить идиотский беспредел чудеса. А ссылка не может очень многих существенных вещей и может из временного объекта (под капотом) сделать локальную переменную. Гениально. Хотя это можно бы сделать руками. Для того чтобы видеть, что происходит. Я насытился твоей аргументацией.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
20.07.2017, 22:39
Цитата Сообщение от IGPIGP Посмотреть сообщение
сделать локальную переменную. Гениально. Хотя это можно бы сделать руками.
Еще и ссылку на объект с объектом путаем.
Простецкие различия:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
//g++  5.4.0
 
#include <iostream>
 
 
#define GENERATE_BODY(name) name() { std::cout << __PRETTY_FUNCTION__ << std::endl; }\
name(const name &) { std::cout << __PRETTY_FUNCTION__ << std::endl; }\
virtual ~name() { std::cout << __PRETTY_FUNCTION__ << std::endl; }
 
 
 
struct Base
{
    GENERATE_BODY(Base)
    void action() const {
        std::cout << "Base::action()" << std::endl;
    }
    virtual void action_v() const {
        std::cout << "Base::action_v()" << std::endl;
    }
};
 
 
 
 
 
 
template<typename F>
void foo_with_reference(F f)
{
    const Base &r{f()};//Нет преобразования (кому нужно, может сам дописать для учета const и тому подобного)
    r.action();//Работаем строго с Base
    r.action_v();//Виртуальность работает
}
 
 
template<typename F>
void foo_without_reference(F f)
{
    Base r{f()};//Получится преобразование, если f возвращает объект-наследник Base.
    r.action();//Это уже другой объект, никак не связанный с тем, который вернула f
    r.action_v();//"Пропала виртуальность". Печалька.
}
 
 
template<typename F>
void foo_with_auto(F f)
{
    auto r{f()};//Не факт, что там Base. Обязательно в наследнике должен быть доступен конструктор копирования/перемещения. Класс не должен быть абстрактным.
    r.action();//Если f вернула наследника Base, то уже логика начальной функции нарушена.
    r.action_v();//Норм.
}
 
 
 
 
struct Derived: Base
{
    GENERATE_BODY(Derived)
    void action() const {
        std::cout << "Derived::action()" << std::endl;
    }
    void action_v() const override {
        std::cout << "Derived::action_v()" << std::endl;
    }
};
 
 
struct AbstractDerived: Base
{
    GENERATE_BODY(AbstractDerived)
    void action() const {
        std::cout << "AbstractDerived::action()" << std::endl;
    }
    void action_v() const override {
        std::cout << "AbstractDerived::action_v()" << std::endl;
    }
    virtual void action_pure_v() const = 0;
};
 
struct NonAbstract: AbstractDerived
{
    GENERATE_BODY(NonAbstract)
    void action_pure_v() const override {
        std::cout << "NonAbstract::action_v()" << std::endl;
    }
};
 
 
 
 
 
Derived create_derived()
{
    return {};
}
 
 
AbstractDerived &create_non_abstract()
{
    static NonAbstract obj;
    return obj;
}
 
 
 
 
int main()
{
    //create_non_abstract();//Чтобы создался статический объект
    std::cout << "\nwithout reference:" << std::endl;
    foo_without_reference(create_derived);
    //foo_without_reference(create_non_abstract);
    std::cout << "\nwith reference:" << std::endl;
    foo_with_reference(create_derived);
    //foo_with_reference(create_non_abstract);
    std::cout << "\nwith auto:" << std::endl;
    foo_with_auto(create_derived);
    //foo_with_auto(create_non_abstract);
    std::cout << "\nend of main" << std::endl;
}
http://rextester.com/PGG6126

Не по теме:

Кстати, в C++17 описано не два, а три контекста с продлением жизни.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.07.2017, 22:39

Удалить из имен обычных файлов (regular file) все цифры
Удалить из имен обычных файлов (regular file) все цифры.

Чем ссылки тега nav отличаются от обычных ссылок на странице?
Тега nav

Инициализация обычных статических переменных
Добрый вечер. Читаю небезызвестную философию джава. В одной из глав есть пример о порядке иницыализации статических и обычных полей. Код...

Отличие обычных переменных и глобальных
Здравствуйте, расскажите пожалуйста в чем отличие глобальных переменных об обычных объявляемых в процедуре?! Делал таймер, когда объявил...

Чтение имён переменных из файла и раскрытие этих переменных
Допустим есть скрипт &quot;1&quot;,в котором описано: set ueqrxbfmfi=t for /f &quot;usebackq tokens=*&quot; %%a in (&quot;test.txt&quot;) do set...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru