Этого треда уже нет.
Это копия, сохраненная 26 сентября 2015 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
40 Кб, 642x364
Оффициальный™ традиционный® C++ тред #5 #531254 В конец треда | Веб
О божья месть, как тяжко устрашен
Быть должен тот, кто вскоре прочитает
Тот код, что в этом треде был рожден!

Здесь черви, что к крестам любовь питают,
Чтят байтоебство мудрости венцом
И Бьерна откровениям внимают,

Вновь корчатся в терзанье вековом,
Узрев template error'ов рой несметный,
И снова компилятор мнят врагом,

Не зная, что все их мученья тщетны.


Литература:

Для нюфань:
Три классических учебника для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Герберт Шилдт - C++. Базовый курс (2010) - http://goo.gl/qMLAFl
Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - http://goo.gl/QvjR6x
Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
Для желающих сразу начинать с Откровений Создателя - классика (может показаться суховатым):
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2009) - https://goo.gl/87qXtW

Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
Скотт Мейерс - Effective Modern C++ (на ангельском) (2015) - https://goo.gl/uImH0J
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR

Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт C++14 (на ангельском) - https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
Последняя на данный момент версия черновика стандарта C++17 (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4527.pdf

Тонкости языка (для гурманов):
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo

Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - http://goo.gl/0M4NpG

Ссылки:

Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru/
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/
Блог Герба Саттера (на ангельском) - http://herbsutter.com/
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru/

Куда писать код:

Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать, следуя инструкциям с этой страницы: https://www.visualstudio.com/ru-ru/products/free-developer-offers-vs.aspx. Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".

Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, Code::Blocks (sudo aptitude install codeblocks) и работать в ней.

Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.

Памятка:

Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.

Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode

Предыдущий: >>525225 (OP)
#4 #531262
>>531245
А можешь пояснить насчёт этого всего? Чем вообще лучше пользоваться для констант? #define, enum, const, constexpr? Что для чего?
45 Кб, 833x384
#5 #531264
Что я сделал не так? Почему вместо моей пятерки он считал мне хуй пойми что?
#6 #531265
Аноны, а можно сделать, чтобы объект класса создавался автоматически? Примерно как cout. Я же не пишу ostream cout, а сразу начинаю им пользоваться. То есть охота сделать класс с одним статическим объектом. И если подцепляю хедер, то он у меня автоматом создаётся объект. Как такое вообще можно провернуть? Хотя бы примерно.
#7 #531266
>>531264
Потому что ты открыл файл на запись, а не чтение.
#9 #531270
>>531262
constexpr и constexpr-методы для сложных инициализаций констант.
#10 #531272
>>531269
Спасибо. То есть получается, объект создаётся в конце хедера? Как я понял, в каждом файле будет свой статический объект, верно?
#11 #531275
>>531265
cout это обычная глобальная переменная класса ostream, которая инициализируется до первого обращения к ней. Берешь и создаешь свою такую же, сможешь обратиться к ней отовсюду, где она будет видна.

Если тебе принципиально "автоматическое создание", то тогда непонятно, где ты хочешь, чтобы находился созданный объект. Допустим, ты все сделал, подключил хэдер, как ты дальше получишь единственный автоматически созданный объект класса? Если ты хочешь не получать объект, а использовать только статические методы через A::f (), то тебе и не нужно создавать объект, просто делаешь все методы статическими. А нестатические ты энивей не сможешь так вызвать даже транзитом. Если ты хочешь получить откуда-то ссылку на объект, то воспользуйся паттерном синглтон. Грубо говоря, так:

[code lang="cpp"]
class TvoyaMamka
{
\tstatic std::unique_ptr <TvoyaMamka> instance_;
static std::once_flag flag_;
\t
\t//Основное содержимое класса
\t//Приватные конструкторы
\t
public:

virtual ~TvoyaMamka();
static TvoyaMamka & getInstance()
\t{
\t\tstd::call_once(flag_, []
\t\t{
instance_.reset ( std::make_unique <TvoyaMamka> ());
\t\t});
\t\treturn *instance_.get();
\t}
};

//...

//Получаем ссылку на объект-мамку.
//При первом вызове она будет создана, дальнейшие будут возвращать ссылку на уже созданную
TvoyaMamka & mamka = TvoyaMamka::getInstance ();
[/code]
#11 #531275
>>531265
cout это обычная глобальная переменная класса ostream, которая инициализируется до первого обращения к ней. Берешь и создаешь свою такую же, сможешь обратиться к ней отовсюду, где она будет видна.

Если тебе принципиально "автоматическое создание", то тогда непонятно, где ты хочешь, чтобы находился созданный объект. Допустим, ты все сделал, подключил хэдер, как ты дальше получишь единственный автоматически созданный объект класса? Если ты хочешь не получать объект, а использовать только статические методы через A::f (), то тебе и не нужно создавать объект, просто делаешь все методы статическими. А нестатические ты энивей не сможешь так вызвать даже транзитом. Если ты хочешь получить откуда-то ссылку на объект, то воспользуйся паттерном синглтон. Грубо говоря, так:

[code lang="cpp"]
class TvoyaMamka
{
\tstatic std::unique_ptr <TvoyaMamka> instance_;
static std::once_flag flag_;
\t
\t//Основное содержимое класса
\t//Приватные конструкторы
\t
public:

virtual ~TvoyaMamka();
static TvoyaMamka & getInstance()
\t{
\t\tstd::call_once(flag_, []
\t\t{
instance_.reset ( std::make_unique <TvoyaMamka> ());
\t\t});
\t\treturn *instance_.get();
\t}
};

//...

//Получаем ссылку на объект-мамку.
//При первом вызове она будет создана, дальнейшие будут возвращать ссылку на уже созданную
TvoyaMamka & mamka = TvoyaMamka::getInstance ();
[/code]
#12 #531277
Почему constexpr переменная должна быть static, если она член класса?
#13 #531279
>>531275

> Если ты хочешь не получать объект, а использовать только статические методы через A::f (), то тебе и не нужно создавать объект, просто делаешь все методы статическими.


Вообще, да, именно статические методы и хотел получить. Просто я почему-то подумал, что вообще без объектов к ним не получится обратиться.
#14 #531280
>>531269
Это какая-то дичь, лол. В каждой единице трансляции с таким хэдером будет создана новая копия init с вызовом конструктора. И единственным на всю программу x и y будет многократно присвоены одни и те же значения. Я не говорю уже о том, что если в одном из таких файлов кто-то после определния init попытается записать в x или y в глобальном контексте например, в конструкторе еще одного статического члена, то последствия будут ужасны.
#15 #531285
>>531277
Если не статик то для нее нужен инстанс, а для статической инстанс не нужен.
#16 #531286
>>531285
Инстанс в смысле экземпляр класса?
#17 #531287
#18 #531288
>>531277
9.4.2/3 "A static data member of literal type can be declared in the class definition with the constexpr specifier ... In both these cases, the member may appear in constant expressions".
Делается это затем, что "it must be immediately constructed or assigned a value", а для нестатического члена-переменной это может произойти только когда объект будет создаваться.
#19 #531293
[code lang="cpp]
void foo ()
{
//...
{
//<- point A
int x = 1;
//<- point B
int y = 2;
//<- point C
}
//...
}
[/code]

Вопрос к гуру. С точки зрения языка, в точке A не определены ни x, ни y, в точке B определена только x, в точке C определены обе. С точки зрения машинного кода, будет ли в точке B в стеке уже находиться y? Проще говоря, все переменные блока пихаются в стек в начале блока, или по мере определения?
#20 #531294
>>531293
Тут не надо быть гуру, чтобы ответить.
[code lang=cpp]
{
int x = y; //Ошибка, потому что y еще не определена (ее нет в стеке)
int y = 1;
}
[/code]
#21 #531298
>>531294
Тогда как решать подобные проблемы:
[code lang="cpp"]
{
int x = 1;
//Код, который может бросить исключение
//int y = 2;
}
//Здесь при проходе исключения нужно очищать стек, в котором хуй знает сколько членов, если для них не выделяется место при входе в блок сразу для всех
[/code]
#22 #531299
>>531298
y без комментария, конечно же.
#23 #531300
>>531298
Хуй знает, что ты пытаешься сделать, но возможно тебе поможет: static_assert, assert, try catch.
#24 #531307
>>531300
Да дело не в проблемах, лол, я просто хочу понять, во что это все компилируется.

Алсо, сейчас посмотрел листинг, судя по всему, таки сразу в начале блока EBP сдвигается так, чтобы дать места всем переменным блока, а потом int x = 1 уже превращается в простое присваивание. Вот такое там:
[code]
; 3 : \tint x = 1;

0001e\tc7 45 f8 01 00
\t00 00\t\t mov\t DWORD PTR _x$[ebp], 1
[/code]
#25 #531346
Обязательно ли знать дискретную математику и понимать алгоритмы программисту си плюс плюс?
#26 #531375
>>531346
Нет. Будешь собирать окна.
#27 #531376
>>531346
Нет.
#29 #531406
>>531298
Стек сам очистится. Если тебе принципиально вызов деструкторов у всех объектов, то в начале скопа обьяви все. Потом уже твой код с исключением
#30 #531415
Плюсаны, где можно своровать "Qt 5.3. Профессиональное программирование на C++"
#31 #531421
>>531346
Нет. Но переписывать потом сам будешь.
#32 #531430
Если я напишу

char foo[128];

локальной переменной или в качестве члена класса, эти 128 байт будут выделены в стеке?
#33 #531431
>>531430
А если это static член класса?
#34 #531447
>>531430
хуй знает, вась. Тебе поможет только отладочный листинг компилятора.
#35 #531448
>>531430
Да.
>>531431
Нет.
#36 #531449
>>531447
Блядь, ну что за долбоебы на моей доске? Для локальных переменных гарантируется, что они будут выделены в автоматической памяти стеке, для статических - что в статической памяти сегменте данных, для динамически выделенных - в динамической памяти куче. Это регламентировано, листинги смотреть для этого не надо, маня.
#37 #531450
>>531448
А где тогда, если статик?
#38 #531451
#39 #531453
А если вот так объявлен массив, то есть длина определяется во время исполнения, то тоже в стеке выделяется память?

И кстати, это официальный C++ или какие-то аддоны компилятора так разрешают делать?
#41 #531456
>>531449
Вась, расскажи плиз, где выделяются классы?
#42 #531457
>>531456
Там же, где и не классы. То, где выделяется, не зависит от того, класс это или примитивный тип.
#43 #531459
>>531456
Классы, уеба, нигде не выделятся.
#44 #531487
Анан, как фастом (ну или просто хотя бы грамотно) поднять Qt и boost? Два года прогаю на MFC и это ж пиздец и не перспективно, короче думаю зря время трачу
По Qt-у думаю это наверну >>531415, норм для старта?
#45 #531488
>>531487
С сайта кьюта скачай кьют криэйтор. И буст с сайта буста. Если тебе из буста нужны только хедер-онли библиотеки, то просто путь для инклюдов добавь. Если нет, то ебись.
#46 #531490
>>531487
Офф доки (одни из лучших в опенсоурсе) + примеры. Ну и вопросы, ответы на которые ты не нашел в доках, задавай здесь.
#47 #531502
>>531459
Сами классы как абстракция нигде не выделятся, да. Но их методы, как и другие объекты второго класса, будут в сегменте кода.
#48 #531503

>>5315027


Методы в сегменте кода, а другие члены при объявлении объекта выделяются и с каждым объектом новые, а методы только однажды?
#49 #531504
>>531453
Он внутри блока объявлен, поэтому на стеке.
Длина в твоем случае не определяется во время исполнения, constexpr вообще не появляется в рантайме, а const появляется, но еще во время компиляции из нее будет выдрано значение в отдельную таблицу констант, которое станет статическим размером. Поэтому, например:

[code lang="cpp"]
const size_t length2 = 128;
const cast <size_t &> (length2) = 1;
int bar [length2]; //Создается массив длины 128
[/code]
#50 #531505
>>531503
Да. Методы и статические члены-данные однажды, только данные будут в сегменте данных, а методы в сегменте кода.
#51 #531506
>>531504

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



Я для того кроме констэкспра и сделал просто конст, чтобы спросить, мол что если там значение, которое во время компиляции неизвестно. Компилятор умный конечно смекнет, что оно таки известно, но по C++ стандарту такое либо разрешено, либо нет. И если да, то значит оно как-то на стеке выделяется и для значений, которые во время компиляции не узнать.
#52 #531507
>>531505
Константы тоже однажды или в каждом объекте свои? Сегмент данных это же статическая память? Если в классе использовать new/delete, то те члены класса будут в динамической? А если объекты с помощью new/delete создавать, то методы тоже в динамической? Чтобы ты всё тут не расписывал посоветуй статью на эту тему.
мимопроходил
#53 #531509
>>531506
Если там значение, которое компилятору неизвестно, то определение массива не скомпилируется. Стандартом определено понятие "константное выражение", которое может быть вычислено на этапе компиляции. Когда компилятор видит определение константы, он смотрит на ее инициализатор. Если там константное выражение, он запоминает его в таблицу констант и в дальнейшем имя этой константы тоже будет константным выражением. Если это константный параметр, который неизвестен, или инициализатор использует неконстантное выражение, то такого не произойдет. Когда ты пытаешься определить массив, в качестве размера допустимо только константное выражение, поэтому компилятор, видя внутри квадратных скобок имя константы, проверяет, является ли она константным выражением. Если да, то он уже знает ее значение, если нет - будет ошибка компиляции. Никакого определения размера в рантайме здесь быть не может. Это все, разумеется, по стандарту, но и расширения компиляторов такого не делают, ибо полностью бы поменялась концепция выделения памяти.
#54 #531510
>>531507
Константность не влияет на это. Статическая константа будет одна, а нестатическая для каждого. Сегмент данных это статическая память. Если создать объект класса в динамической памяти, то его члены-данные из которых объект и состоит будут в динамической. Если просто использовать new в методах класса, то на члены это никак не повлияет, все будет зависеть от того, как был создан объект класса. Методы всегда создаются единожды, в сегменте кода, независимо от того, как создан объект, потому что метод принадлежит не объекту, а всему классу.
http://en.cppreference.com/w/cpp/language/object
http://en.cppreference.com/w/cpp/language/storage_duration
#55 #531511
>>531509
Нихуя себе, и правда ведь. Никогда бы не подумал, что в C++ компилятор может разрешать компилировать штуку с одним объектом какого-то типа, но ругаться на другую штуку того же самого типа. Пиздец ебанутая хуйня. Лучше бы они вообще такие штуки запретили.
#56 #531513
>>531510
Я пока не выучил английский. Есть перевод?
#58 #531517
>>531511
Суть тут в том, что изначально в языке не было способа указать компилятору, что сущность содержит в себе константное выражение. Поэтому использовались const, как наиболее близкие к этому, и выполнялись дополнительные проверки на "статичность" ее значения. А сейчас в языке есть constexpr, с который специально предназначен для того, чтобы декларировать "статичность". Так что используй constexpr, и тебя эта проблема не коснется. А запретить такое использование const нельзя из-за обратной совместимости, легаси-код ведь тоже должен работать как-то.
#59 #531518
>>531514
Ты можешь объявить factorial со спецификатором constexpr, очевидно же. Иначе как компилятор узнает, что можно выполнить его тело на этапе компиляции?
#60 #531521
>>531513
Внизу страницы выбор языков.
#61 #531524
>>531521
Там через гугл переводчик. Неудобно читать.
#62 #531526
>>531524
Ну звиняй, хлопец, бананьев нема. Посмотри книжки в оппосте, у которых год издания поновее.
#63 #531527
>>531379
Похож на сына Вассермана.
Bubble Sorting. #64 #531530
Анончики, совсем извелся я тупой!

#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
int nums [10];
int a,b,t;
int size;

size = 10;

for (t=0;t<size;t++) nums[t]=rand ();
cout << "Ishodnuq masiv:";
for (t=0;t<size;t++) cout << nums[t] << " " ;
cout << "\n";
for (a=1;a<size;a++)
for (b=size-1;b>=a;b--){
if (nums[b-1] > nums){
t=nums [b-1];
nums[b-1]=nums;
nums =t;
}
}
cout << "Otsortirovannuq massiv:";
for (t=0;t<size;t++) cout << nums[t] << " ";
getchar ();
return 0;
}

Например массив :24464, 5, 52464...852(9-ая ячейка), 41(10-ая ячейка).

Почему сравниваются 10-ая и 9 ячейка, если >(b=size-1;b>=a;b--) и > if (nums[b-1] > nums[b])?

И как повернуть начало процесса налево? Ну чтобы сравнивало 1-ую и 2-ую.

Или я что-то не так понимаю? Объясни, друг, что да как, пожалуйста, как если бы пятикласснику объяснял.

Спасибо
Bubble Sorting. #64 #531530
Анончики, совсем извелся я тупой!

#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
int nums [10];
int a,b,t;
int size;

size = 10;

for (t=0;t<size;t++) nums[t]=rand ();
cout << "Ishodnuq masiv:";
for (t=0;t<size;t++) cout << nums[t] << " " ;
cout << "\n";
for (a=1;a<size;a++)
for (b=size-1;b>=a;b--){
if (nums[b-1] > nums){
t=nums [b-1];
nums[b-1]=nums;
nums =t;
}
}
cout << "Otsortirovannuq massiv:";
for (t=0;t<size;t++) cout << nums[t] << " ";
getchar ();
return 0;
}

Например массив :24464, 5, 52464...852(9-ая ячейка), 41(10-ая ячейка).

Почему сравниваются 10-ая и 9 ячейка, если >(b=size-1;b>=a;b--) и > if (nums[b-1] > nums[b])?

И как повернуть начало процесса налево? Ну чтобы сравнивало 1-ую и 2-ую.

Или я что-то не так понимаю? Объясни, друг, что да как, пожалуйста, как если бы пятикласснику объяснял.

Спасибо
#65 #531532
>>531530
Я имел ввиду, почему не 9 и 8, если b-1.

уточняющий фикс
88 Кб, 1688x1018
#66 #531533
>>531518
Почему не робит? Ебланы, делавшие майкрософтовский компилятор, еще не сделали поддержку C++11 или C++14?
#67 #531535
>>531530
У тебя в коде внешний цикл с единицы и первый элемент не будет отсортирован. Сравниваешь элемент массива с самим массивом, это вообще не скомпилируется.
#68 #531537
>>531530
Ии еще.

for (b=size-1;b>=a;b--){
if (nums[b-1] > nums){
t=nums [b-1];
nums[b-1]=nums;
nums =t;
}
}

>if (nums[b-1] > nums){


t=nums [b-1];

Почему b в этих строчках невозможно заменить на что-нибудь другое. Как и почему управляющая переменная подчиняет nums?
#69 #531538
>>531533
Если бы ты прочитал сообщение об ошибке, ты бы понял, что в constexpr-функциях нельзя использовать условные операторы. И исключения, кстати, тоже нельзя бросать.
#70 #531539
>>531537
Еблан, ты можешь свое говно нормально отформатировать и вставить внутри [code тега? У тебя же [b съедается вакабой, хуиная голова.
97 Кб, 1688x1018
#71 #531542
>>531533
А не, это я еблан. Хотя вижуал студия тоже ебланская - сообщение об ошибке хуевое, подсвечивает использование функции в коде, а не то, что функция объявлена constexpr, но в ней запрещенные для constexpr конструкции.
#72 #531543
>>531538

>И исключения, кстати, тоже нельзя бросать.


Вообще-то можно
#73 #531544
for (a=0;a<size;a++)
for (b=size-1;b>=a;b--){
if (nums[ b-1] > nums[ b]){
t=nums [ b-1];
nums[ b-1]=nums;
nums[ b ] =t;
}
}

тест
#74 #531545
>>531544
заебца. так вот...
#75 #531546
>>531535
for (a=0;a<size;a++)
for (b=size-1;b>=a;b--){
if (nums[ b-1] > nums[ b]){
t=nums [ b-1];
nums[ b-1]=nums;
nums[ b ] =t;
}
}

Пофиксил. ОНО компилируется. Но вопрос остался. Хуле не 9 и 8 а 10 и 9 сравнивается?

бейте, не обоссыте
#76 #531547
>>531542
Потому что это шаблон, в них ошибки не обязаны диагностироваться компилятором по стандарту.
#77 #531548
>>531546

>for (a=0;a<size;a++)


for (b=size-1;b>=a;b--){
if (nums[ b-1] > nums[ b]){
t=nums [ b-1];
nums[ b-1]=nums[ b ] ;
nums[ b ] =t;
}
}

упс... теперь точно норм.
#78 #531549
>>531547

>в них ошибки не обязаны диагностироваться компилятором по стандарту



А что, другие ошибки обязаны? Можно пруф?

Это не отменяет того, что хуевую диагностику сделали.
#79 #531550
>>531543
В C++11 нельзя фактически ничего, кроме return. В C++14 наоборот, можно почти все, но пока это не все компиляторы поддерживают.
#80 #531551
>>531548
Я не буду читать твое говно, пока ты не сделаешь нормальное форматирование. Залей на пастебин, блядь, никакого уважения к анонам.
#81 #531552
>>531550
Вроде кланг поддерживает, и больше никто.
140 Кб, 1440x900
#82 #531554
Интересно, если я сделаю изменяющееся constexpr выражение и понаделаю array'ев с размером, задающимся им, вижуал студия обосрется с показом в редакторе их типа?
#83 #531556
>>531551
Простите, мастер Шифу.

Вот это говно, компилирующее и сортирующее: http://pastebin.ru/1Wsmm6wU
#84 #531558
>>531556
Теперь мне кто-нибудь скажет бля, что я понимаю не так или почему сравниваются 9 и 10 , а не 9 и 8, если b-1?

Мммммм? Ааааааа?
#85 #531559
>>531549
1.4/2. Случаи, когда диагностики не надо, помечаются как "no diagnostic required", например, ошибки шаблонов или нарушения one-definition-rule.
#86 #531560
>>531558
Ну и вот это:

>Почему b в этих строчках невозможно заменить на что-нибудь другое. Как и почему управляющая переменная подчиняет nums?

#87 #531561
>>531554
Неа, как только ты редактируешь код, все constexpr перевычисляются. Студия покажет просто вычисленные значения.
#88 #531562
>>531556
В студии отладчик показывает, что на первой итерации цикла b равно 9, как и должно быть.
>>531560
Можно заменить на что угодно без проблем.
332 Кб, 1688x1018
#89 #531563
>>531559
Пиздец, у нас в треде имеется c++ standard lawyer? Нахуй ты стандарт читаешь, ты что ебанутый? Страуструп, залогинься.
#90 #531564
>>531563
Ну а хуле, там все просто и понятно. На самом деле нет, но в дополнение к гуглу очень даже неплохо.
#91 #531568
Анон, что я сделал не так в реализации сортировки?
https://ideone.com/6WdceZ
105 Кб, 1680x1050
#92 #531569
>>531561
Видимо, ты не понял о чем я, а я вот об этом https://akrzemi1.wordpress.com/2013/06/20/constexpr-function-is-not-const/
Студия действительно обсирается и показывает неправильный размер std::array у второй переменной.
115 Кб, 1680x1050
#93 #531572
>>531569
Переделал скриншот, а то там тултип загораживает кусок кода
#94 #531578
>>531562
for (b=size-1;b>=a;b--){
if (nums[c-1] > nums[c]){
t=nums [c-1];
nums[c-1]=nums[c];
nums[c] =t;
}
}

Это совсем глупость, чувствую, но я про такую замену.
#95 #531581
>>531572
Лол, но почему во втором случае выводится 1? Понятно, что там много извращений у тебя, но в итоге-то между foo и bar ничего не меняется, не?
#96 #531582
>>531578
Ну, у тебя c не инициализирована, должно вылезти предупреждение. В остальном - ты вполне можешь его использовать, это просто будет постоянный индекс, не зависящий от цикла.
#97 #531583
>>531581
Я только что понял, что не ту статью скинул
Вот та, которуя я хотел показать http://b.atch.se/posts/non-constant-constant-expressions/
#98 #531585
>>531582
с инициализировал соответственно, но прогу крашит на переходе к сортировке
#99 #531586
>>531585
И чем ты c инициализировал?
#100 #531587
>>531568
Блять, почему в треде про С++ объясняют какую-то хуйню мудакам, а по интересной задаче никто ничего не говорит?
#101 #531588
>>531587
Интересная задачка это какая?
#102 #531589
>>531588
Ссылку открой.
#103 #531590
>>531589
С heap sort?
#104 #531591
>>531586
интом
#105 #531592
Алсо, почему-то массив не копируется в вектор. Или копируется, то потом этот вектор я как-то неправильно использую.
https://ideone.com/0mEjOf
#106 #531593
>>531591
Значением каким, блядь? У тебя написано int c, в переменной из-за этого мусор. Ты пытаешься считать nums [0x0bf468], и все крашится.
#107 #531594
>>531592
Предположу, что sizeof(a) в той функции - это хуйня какая-то, а вовсе не размер твоего массива.
#108 #531596
>>531594
Действительно. А почему так? Это можно объяснить?
https://ideone.com/8kI4SG
#109 #531598
>>531596
Потому что в C++ sizeof это конструкция, вычисляемая во время компиляции. А когда компилируется функция, как она может вычислиться? Из этого я сделал вывод, что раз этот код вообще компилируется, то sizeof там выдаст такой же результат, как sizeof(int*).
#110 #531599
>>531592
sizeof(a) = sizeof (int *). Ты копируешь только первый элемент, замени sizeof (a) на параметр size.
#111 #531600
>>531599

>Ты копируешь только первый элемент



Почему? На ideone указатель однобайтовый что ли? Не верю.
#112 #531602
>>531593
Поставил в массиве с двумя ячейками инт с= 1, сработало.

Спасибо.
#113 #531603
>>531600
В assign передается указатель на начало массива и на начало плюс sizeof (int *)/sizeof (int) = 4/4 = 1.
#114 #531605
>>531603
А, ну ладно. Значит ли это, что там 32-битная архитектура? Ведь на 64-битной sizeof(int*) должен быть 8, не так ли?
#115 #531606
>>531605
Да, но если у тебя 64-битная ОСи пекарня, это не значит, что все будет компилироваться под нее автоматически. Это тот еще геморрой, поэтому если нет требований к производительности, обычно компилируют для 32-bit и работают в режим совместимости.
#116 #531607
>>531602
Товарищи, вот вы скажите, если я так застрял на пузырьке, это значит, что суждено мне томиться в темнице гуманитарных наук веки вечные?
#117 #531608
>>531606
Да ладно, не верю. По крайней мере про g++ и clang++ не верю.
215 Кб, 1280x673
#118 #531609
>>531607
Рандомпик привлекающий внимание отклеился.
#119 #531610
>>531607
Не знаю, я писал пузырек только на паскале, а на кресты вкатился, когда уже выроз из пузырьков.
#120 #531611
>>531607
Судя по всему, ты решил по какой-то неизвестной причине выучить первым языком программирования C++. Это конечно пушка и совсем хуевое решение, но если уж ты решил и какое-то время на это потратил, то ладно.

И нет, ничего это не значит. Судя по куче моих знакомых, очень многие в начале много тупят на таких вещах, которые любому программисту кажутся очевидными.
#121 #531612
>>531611
Хотя на самом деле я даже не уверен, насколько это хорошее или плохое решение, потому что многие считают C подходящим первым языком, потому что байтоеблю когда-нибудь изучить надо. А C++ Си в себя включает.
#122 #531614
>>531609
ахтыжсука.

Привлекающий внимание рандомпик отклеился.

фикс
#123 #531615
>>531583
Это просто божественно, упоротый засранец сделал меня охуеть. Есть еще подобное?
#124 #531616
>>531615
Более странного и ебанутого, чем это, я не знаю. А так если подписаться на hackernews и reddit.com/r/cpp, то время от времени прикольные штуки попадаются.
#125 #531618
>>531611
Я загуглил. Смайлодрочеры всяко разных говнофорумов яро советовали С. Долго думать не стал.
#126 #531619
>>531618
А, ну если C, то это лучше. А то это вроде C++ тред, я о просто C и не подумал.
#127 #531634
Какой в C++ максимальный диапазон индексов массива?
#define SIZE 40000
int seq[SIZE]
работает нормально, а программа с
#define SIZE 65000
int seq[SIZE]
крашится при запуске.
#128 #531636
>>531634
Крашится потому что стека не хватает. Максимальный диапазон зависит от компилятора, каким типом он считает числовые литералы.
sage #129 #531638
>>531636

> Максимальный диапазон зависит от компилятора, каким типом он считает числовые литералы


Имелось ввиду при такой реализации как у тебя (через дефайн).
#130 #531640
>>531634
Нет лимита. Индекс должен влезать в size_t, который обычно 2^32 = 4294967296, но если он не влезет, ты получишь ошибку компиляции. С точки зрения лимита памяти, стандарт это не регламентирует, ты можешь запустить на машине с 640 килобайт памяти которых должно хватить каждому, лол и покрашиться уже на паре десятков тысяч. Стандартом регламентировано, что в этом случае должно бросаться исключение out of memory, емнип.
#131 #531648
Как вообще экземпляр класса выглядит в памяти? И где он выделяется?
Известно ли значение членов-переменных класса во время компиляции?
Известно ли значение х во время компиляции, при х = sqrt(2) ?
#132 #531654
>>531648
Как последовательно идущие: объекты его базовых классов есть нюансы, гугли empty base optimization, указатель на его vtable если есть хотя бы один виртуальный метод, его нестатические члены-данные, с возможными промежутками из-за выравнивания. Порядок может различаться, стандарт вроде бы это не оговаривает. Гарантируется, что данные-члены будут идти в порядке их объявления, возможно, есть еще какие-то гарантии для объектов базовых классов, хуй знает.
#133 #531656
>>531648
Значение переменных неизвестно, это же переменные, блядь, они устанавливаются конструктором.
sqrt не является частью языка, так что зависит от того, откуда ты ее взял. Если она объявлена constexpr, то будет известно, иначе нет.
#134 #531662
>>531656

> Значение переменных неизвестно, это же переменные, блядь, они устанавливаются конструктором.


Но они ведь инициализованы.

> sqrt не является частью языка, так что зависит от того, откуда ты ее взял. Если она объявлена constexpr, то будет известно, иначе нет.


То есть constexpr int x = f(y); не будет компилироваться, если f() не объявлена как constexpr функция?
#135 #531665
>>531662

>Но они ведь инициализованы.


Без разницы, инициализация членов класса всегда рассматривается не как потенциально константное выражение, а как нечто, что нужно тупо передать конструктору. Все, что ты пишешь после =, будет неявно скопировано в список инициализации конструктора A::A () : x { 1 } { ... }.

>То есть constexpr int x = f(y); не будет компилироваться


Именно так.
#136 #531679
>>531542
Тащемта факториал от нуля обычно доопределён равным 1. Логики в этом нет, но намного упрощает жизнь математика.
#137 #531681
>>531679
Логика есть, n! = Г(n+1) же.
#138 #531682
Анон, возвращаю из функции-шаблона указатель на объект и из-за этого ловлю сегфолт. До возвращения проверил - указатель указывает на то что нужно. Что за хуйня? Спасибо.
#139 #531684
>>531681
Ты не можешь поймать сегфолт без разыменования. Вообще, код покажи.
#140 #531685
#141 #531686
>>531684
Да нет возможности его показать.

>Ты не можешь поймать сегфолт без разыменования.


Я врать что ли буду, лол? До оператора return работает отладочная печать. После вызова этой функции печать не работает. Сигфолт именно в ретерне, но с чего бы это ему?
#142 #531687
>>531607
Если ты не способен написать даже пузырёк, то ты безнадежен
#143 #531689
>>531682
Где объект лежит? Небось на стеке.
#144 #531691
>>531689
А вот и неть. Под объект память еще давно выделялась динамическая. А эта функция поиска возвращает указатель на него и в этот момент сегфолтится.
#145 #531700
Не могу посмотреть код, но функция объявлена как-то так
template<typename karasique>
typename sclad<payload>::yoba* sclad<karasique>::get(karasique& a) {
...Ищем йобу ранее добавленную йобу, возвращаем укащатель на нашу йобу
return yoba_ptr;
}
Ну чому там происходит сегфолт?
#146 #531702
>>531686
Указатель это примитивный тип, никакие действия с ним, кроме разыменования некорректного, не могут покрашить программу. Если ты не разыменовываешь его например, возвращая ссылку вместо указателя, то крашится не из-за этого. Например, у тебя может быть исключение в деструкторе какого-то из локальных объектов, или еще что-то подобное.
#147 #531704
>>531700
Как йобы хранятся в карасике?
#148 #531706
Добрался до пеки наконец, все так как сказал >>531702
ошибка была в деструкторе одного из локальных объекетов функции. Спасибо большое.
#149 #531730
Как перегрузить оператор [][], если нельзя принимать два аргумента? Мне нужно именно перегрузить оператор, а не создавать одномерный массив[row*column+width] вместо этого.
#150 #531731
>>531730
Оператора [][] нет. Перегружаешь [], который вернет объект класса, для которого перегружен [], который вернет значение. Будешь писать tvoya_mamka [15] [1];
#151 #531733
>>531731

>tvoya_mamka [15] [1]


Передаются два аргумента же. Или я что-то не понял?
#152 #531751
>>531733
Непонял. tvoya_mamka [15] [1] обрабатывается как (tvoya_mamka [15])[1] кроме там случая нормального двумерного массива (который не массив указателей на массив).
#153 #531754
Решил выучить C++. Но вот подумалось, ну прочитаю я пару книг, разберусь в синтаксисе, что куда писать и как из этого сделать программу. А дальше что? Чтоб развиваться же надо кодить, а что кодить? Где вы берете идеи?
#154 #531755
>>531751
Случай двухмерного массива это не массив указателей на массив, а несколько одномерных массивов подряд. int a [5][10]; a [1] - второй по порядку массив из десяти интов. a [1] [2] эквивалентно (a [1]) [2], т.е. третий элемент этого "подмассива".
#155 #531813
Где выделяется память для `MyClass a(x);` ?
#156 #531831
>>531456
>>531648
>>531813
Берешь и изучаешь про storage duration по ссылкам выше, сука. Заебал уже одно и то же спрашивать.

Алсо, возможно, это какой-то зеленый, посоны, предлагаю игнорировать.
#157 #531833
>>531831
Лол так и есть. Джава-дебил какой-нибудь тролит и семенит.
#158 #531834
>>531831
Первый анон не я. Вот это >>531813 в полусне запостил. Извиняюсь.
#159 #531837
>>531833
Нет. Мне просто интересно стало когда спрашивали и тоже спросил. Так где искать литературу на русском?
мимопроходил
#160 #531841
Раз вам нужно сменить тему, то помогите разобраться с сетью на С++. Совершенно не представляю как работают клиент-сервер и что это вообще такое. Могу написать 2 программы. Первая принимает переменную int и возвращает на единицу больше. А вторая тоже принимает int, но возвращает на единицу меньше. Обе через cin/cout это делают. И могу написать bush после 15ти минут в гугле который от одной программы вывод направляет на ввод другой, а вывод другой на ввод первой и зацикливает. Но эти программы должны лежать на одном компьютере, а я хочу чтобы они были на разных. И общались между собой без всяких башей. Как такое называется? Как сделать? Есть литература? Нужны дополнительные библиотеки?
#161 #531844
>>531841
Нахуй это здесь спрашивать. Тред посвящен языку. Так же как и кто-то там выше пузырек пытался запилить, да нахуй спрашивать это в С++ треде, каким нахуй местом это касается языка?
#162 #531846
>>531844
Что это? Я на С++ хочу это сделать. Как называется? Где спросить?
#163 #531847
>>531846
А если тот анон со своим пузырьком захочет его переписать на питон, ему что, в питон тред блядь идти?
#164 #531870
>>531754
Пойди в /gd/, спизди идеи у тамошних Кириллов и сделай игру на Unreal Engine.
#165 #531871
>>531841
boost::asio

Qt::что-то там
#166 #531939
>>531841
socket.h
#167 #531995
Что не так?
[code lang=cpp]
//DUNGEON.h
namespace dng{
struct Row;
class Dungeon {
public:
Dungeon(const int, const int);
~Dungeon();
Row operator[](const int);

private:
char operator()(const int, const int);
friend struct Row;

const int D_HEIGHT, D_WIDTH;
char dungeon;
};
struct Row {
Row(Dungeon& dungeon, const int y) : dungeon_(dungeon), y_(y){}
Dungeon dungeon_;
const int y_;
char operator[](const int col)
{
return dungeon_(y_, col);
}
};
}

//DUNGEON.cpp
Dungeon::Dungeon(const int height, const int width) : D_HEIGHT{height}, D_WIDTH{width}
{
char
dungeon = new char[D_HEIGHT];
for (int i = 0; i < D_HEIGHT; i++)
dungeon[ i ] = new char[D_WIDTH];

for (int y = 0; y < D_HEIGHT; y++) {
for (int x = 0; x < D_WIDTH; x++) {
dungeon[y][x] = NOTHING;
}
}
}

char Dungeon::operator()(const int y, const int x)
{
return dungeon[y][x];
}

Row Dungeon::operator[](const int y)
{
return Row(
this, y);
}

//MAIN.cpp
#include <fstream>
#include "Dungeon.h"
#include "Constants.h"

int main()
{
std::ofstream out("dungeon.txt");
if(out.fail()){
perror("dungeon.txt");
return 1;
}

dng::Dungeon dungeon(36,96);

for (int y = 0; y < 36; y++){
for (int x = 0; x < 96; x++){
out << dungeon[y][x];
}
out << "\n";
}

return 0;
}

//Ошибка при рантайме
// Error in `./a.out': munmap_chunk(): invalid pointer: 0x00007ffe3fb85000
[/code]
#167 #531995
Что не так?
[code lang=cpp]
//DUNGEON.h
namespace dng{
struct Row;
class Dungeon {
public:
Dungeon(const int, const int);
~Dungeon();
Row operator[](const int);

private:
char operator()(const int, const int);
friend struct Row;

const int D_HEIGHT, D_WIDTH;
char dungeon;
};
struct Row {
Row(Dungeon& dungeon, const int y) : dungeon_(dungeon), y_(y){}
Dungeon dungeon_;
const int y_;
char operator[](const int col)
{
return dungeon_(y_, col);
}
};
}

//DUNGEON.cpp
Dungeon::Dungeon(const int height, const int width) : D_HEIGHT{height}, D_WIDTH{width}
{
char
dungeon = new char[D_HEIGHT];
for (int i = 0; i < D_HEIGHT; i++)
dungeon[ i ] = new char[D_WIDTH];

for (int y = 0; y < D_HEIGHT; y++) {
for (int x = 0; x < D_WIDTH; x++) {
dungeon[y][x] = NOTHING;
}
}
}

char Dungeon::operator()(const int y, const int x)
{
return dungeon[y][x];
}

Row Dungeon::operator[](const int y)
{
return Row(
this, y);
}

//MAIN.cpp
#include <fstream>
#include "Dungeon.h"
#include "Constants.h"

int main()
{
std::ofstream out("dungeon.txt");
if(out.fail()){
perror("dungeon.txt");
return 1;
}

dng::Dungeon dungeon(36,96);

for (int y = 0; y < 36; y++){
for (int x = 0; x < 96; x++){
out << dungeon[y][x];
}
out << "\n";
}

return 0;
}

//Ошибка при рантайме
// Error in `./a.out': munmap_chunk(): invalid pointer: 0x00007ffe3fb85000
[/code]
#168 #532022
>>531995
Очевидно, что ты проебался с разметкой и указателями.
#169 #532024
>>531841
Есть нормальные высокоуровневые библиотеки для клиент-серверной работы. Casablanca, например, или libcurl старое проверенное говно мамонта. Только средствами языка ты заебешься делать что-то, кроме своего пинг-понга.
#170 #532028
>>532022
Ок, вот запускаемая версия с нормальной разметкой
http://code.runnable.com/VdMajRA5sdkMVhvt/dungeon_generator-for-c%2B%2B
#171 #532030
>>531841

> не понимаю как это работает.


Для начала нужно почитать о модели OSI, об целях третьего и четвёртого подуровня и об устройстве протоколов IP, TCP и UDP. А после этого не заморачиваться и использовать библиотечные обёртки системных функций.
#172 #532031
>>532028
Как-то плохо тупо писать в Dungeon.hpp в конструкторе только типы аргументов, без названий - ведь хедер это как бы интерфейс, и должно быть понятно, что оно делает.

А еще если ты берешь в качестве аргументов int копию, то нет никакого смысла делать const - const нужен если по ссылке, а так эти инты в любом случае копируются.

А еще спасибо, что спалил мне такой классный сайт. Буду им пользоваться теперь.

Догадка, что у тебя может быть не так.
Ты уверен, что

char dungeon = new char*[D_HEIGHT];

создает то, что ты думаешь? Я просто плохо си знаю и не помню, как там работают все эти звездочки и скобки квадратные, когда их много. Если ты уверен, то ок. А если нет, то загугли и перепроверь, то ли там выделяется, что тебе нужно. И в деструкторе проверь, так ли delete[] работает, как ты думаешь.

Кстати, почему std::array или std::vector не хочешь использовать?
#173 #532034
>>532031
Ну и создай новый main.cpp и посмотри просто, будет ли у тебя вылетать оно, если создать экземпляр твоего класса, разименовать каждый указатель в этом dungeon, и выйти. Без работы с файлом. И посмотри, когда вылетает - в констркуторе, в деструкторе или при разименовании.
#174 #532036
>>532031

>А еще если ты берешь в качестве аргументов int копию, то нет никакого смысла делать const - const нужен если по ссылке, а так эти инты в любом случае копируются.


Я просто тестил кое-что и теперь лень убирать.

> еще спасибо, что спалил мне такой классный сайт. Буду им пользоваться теперь.


Не за что.
#175 #532039
>>532036
Какой же ты мудак, блядь. Я минут десять втыкал в твой код, пока не понял, что ты в конструкторе выделяешь в локальную переменную dungeon вместо члена класса. Ой дурак, пиздос.
#176 #532041
>>532039
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯДЬ.
ПИЗДЕЕЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦ
#177 #532042
>>532039
спасибо тебе, добрый анон.
#178 #532043
>>532039
Вот чтобы не было такой хуйни, делай всегда имена приватных членов с суффиксом_.
#179 #532047
>>532030
Где об этом почитать? Гуглятся огромные книги таненбаума и олевера. На вики не понял.

>>531939
Спасибо. Гуглится. Почитаю.
#180 #532058
>>532047
В одном из предыдущих тредов обсуждалась замена Таненбауму, книжка по лекциям Машечкина. Ссылка тоже была там. Но вообще я бы на твоем месте попробовал Таненбаума, читается легко и интересно.
#181 #532061
>>532058

>Машечкина


Нашёл. Там вроде по ОС. А таненбум слишком большой.
#182 #532062
>>532061
Там про сети две главы.
#183 #532063
>>532062
Тогда спасибо. Скачаю почитаю.
14 Кб, 361x408
#184 #532099
VS Community 2013

>free


>free!



>License: 30 day trial


>This license has expired



На SO советуют запускать с RunAsDate лол. Или регать мс акк, давать студии доступ к инету, логиниться, ставить себе анальные зонды. Ну охуеть теперь.
free, блять.
#185 #532107
>>532099

> использует продукцию Microsoft


> возмущается анальным зондам

#186 #532110
>>532099
В чем проблема-то, лол? Я вот с dreamspark поставил enterprice edition, брат жив, зависимость лютая.
#187 #532135
>>532110
Да, в EE с 2008 студий никаких проблем никогда не было. А тут купился на ништяки типа плагинов, поставил Community, и на тебе. Буду знать теперь.

>>532107
Без проблем пользуюсь всякой продукцией, не требующей онлайна. Пусть попытаются что-то передать - файрволлы рулят.
#188 #532149
>>532135

> файрволлы рулят


Какой фаервол? Твой трафик анализируется на другой машине с открытым ПО?
#189 #532161
>>532149
Любой, который ставит хук на сетевые функции и хер что сделаешь, будучи серьезным приложением.
Например, Outpost. Или ты намекаешь, что и в нем могут быть анальные зонды, спонсируемые майкрософтом? Несереьзно, за столько лет уже спалились бы. Прокси + вайршарк, или что там сейчас юзают. Спалились бы == вой жуткий поднялся бы == потеря тысяч клиентов == банкротство. Нереально. Ну и как бы не Outpost-ом единым, есть и другие варианты.
#190 #532183
>>532161
А когда оказалось, что десятка шлет запись с вебкамеры, поднялся вой, ммм? Всем похуй, пора бы привыкнуть.
121 Кб, 600x400
#191 #532185
>>532183

>поднялся вой, ммм?


А при чём тут ммм?
#192 #532187
>>532185
Даже объяснять лень.
#193 #532196
>>532161

> сетевые функции


Сетевые функции контролируются системой производства майскрософт. Если твой фаервол живет в среде операционной системы виндоуз то абсолятно вся информация которую он получает выдается ему системой (тоесть находится под контролем майкрософта). И если майкросфт захочет передать какую-то информацию фаервол (живущий в системе) никак помешать не сможет в принципе, он даже его не заметит. Шанс защищиться есть только снаружи, тоесть пытатся контролировать и анализировать исходящий трафик с помощью другой промежуточной машины, желательно с открытым ПО (как вариант виртуализация).
#194 #532207
>>532185
Ты не замечаешь внешнего сходства Мавроди и Била? Да они же двоюродные братья.
#195 #532252
>>532183
Ну как бы да. Все адекватные айтишники послали десятку нахуй и решили, что после конца семерки переберуться на линукс.

>>532196
Верно пишешь. И выводы верные - любой скрипткиддис может посмотреть, наебывает ли нас майкрософт (обходит ли файрволл на уровне ядра) - с помощью всего лишь одной машины. Как только при включенном "mode: block all" пойдет траффик, значит, наебывает. Но за последние 8 лет такого никто не замечал, всё работает, клиенты довольны.
#196 #532271
>>532252
Посоны, а вдруг Visual C++ тоже незаметно во все компилируемые программы вставляет код, который отправляет на серверы весь std::cin?
#197 #532273
>>532271
Нет. Люди бы заметили. Куча реверс инженеров проверяют ассемблерный код и всё такое.
#198 #532276
>>532273
Когда ты компилируешь под винду, то у тебя и дизассемблер проприетарный под виндой. И он может намеренно скрывать этот код, ну или винда видит запущенный дизассемблер и подменяет код для анализа.
#199 #532277
>>532276
Под вайном программы работают. Значит никакой подмены нет.
#200 #532320
>>532271
Не. Он просто вставляет аналоги Sleep(1) в кучу разных мест, чтоб юзеры делали апгрейды.

и почти не шучу же. В какие-то большие продукты точно помню кто-то такое засовывал
#201 #532327
>>532273

>Куча реверс инженеров проверяют ассемблерный код


Средствами той же винды, лолблять.
92 Кб, 640x426
#202 #532339
>>532196
Хардварные файерволлы наше все.
#203 #532355
ОП съебал в крым, джва дня не будет на связи.
#204 #532365
>>532327
XXXDDDD))
IDA разбирает бинарник вне зависимости от оси на которой установлена. Ос ей нужна только для дебага по удалёнке
147 Кб, 616x1046
#205 #532409
Поясните, я читаю Страуструпа и делаю задания, но на большинство контрольных вопросов и терминов я ответить не могу. Что я не так делаю?
sage #206 #532424
>>532409

>Чему равен индекс 3 элемента вектора


Почему просто взять и не спросить про начальный индекс любого массива? Нужно какую-то хуитень инопланетную спрашиать. Все через жопу и язык такой же черезжопный.
#207 #532433
>>532424

> Почему просто взять и не спросить про начальный индекс любого массива?


Это более очевидно, ньюфаг может и вспомнить. А так может запутатся, обосрется с ответом - появится шанс что запомнит.
#208 #532434
>>532409
Ну например там есть ебланские вопросы "что такое вычисления?". А вообще я не знаю, что ты делаешь не так. Может ты пытаешься как на экзамене ответить, не гугля? Используй всю доступную информацию.
#209 #532439
>>532434
Ну, я гуглю, но некоторые вопросы или термины даже гугол не знает и их в книге не нашёл. Например:
<<
#include
библиотека
вывод
компилятор
вычисления
и т.д.
Может я что и знаю, но что на эти термины писать - я не понимаю. Я себе отдельый файл завёл в ворде для них.
#210 #532445
>>532439
Лол. Если ты книгу читал, то тебе должны были про это что-то говорить, нет?

>вычисления


Это вроде обычное слово. Что непонятного?

<< - оператор такой
В C это побитовый сдвиг не помню в какую сторону. В C++ операторы можно перегружать, поэтому есть всякие stream'ы типа cout, с которыми он используется.

#include - вставить текст из другого текстового файла в этот при компиляции

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

вывод - ну типа то, что программа печатает, например через cout или printf

компилятор - программа, которая текстовые файлы с кодом превращает в бинарные файлы, с которыми может работать компьютер, у тебя это скорее всего g++, clang++ или майкрософтовский компилятор, встроенный в вижуал студию

И кстати это все еще ты, тот, кому на рандомном форуме посоветовали C первым языком?
#211 #532446
>>532445

>И кстати это все еще ты, тот, кому на рандомном форуме посоветовали C первым языком?


Нет, но я тут частенько спрашивал и приводил код.
Помню, мне кто-то с локалом, стд и консолью помог в треде.
#212 #532447
>>532439
Страуструп для новчиков хуево пишет. Попробуй другую книгу. А когда наберешься опыта и знаний, можешь начать читать Страуструпа "for mastery".
#213 #532451
>>532439
На вопросы страуструпа отвечать не надо. Там достаточно что ты сам понимаешь что такое вычисление и компилятор. И когда он попросит Переписать калькулятор только чтобы перегрузить оператор тебе этого делать не обязательно т.к. до этого он ещё раз 5 даст такое же задание только другими словами опишет и размер исходного кода решения будет меньше.
#214 #532468
>>532451
Вообще, стоит ли делать задания, которые я в уме решил?
Просто, тут есть задание, которое делать и придумывать долго, но я его, как бы, в уме решил на ++.
#215 #532472
>>532409

>Что я не так делаю?


Читаешь Страуструпа.
#216 #532476
>>532468
Нет. Но он задают много заданий на одну тему. Реши только одно в программе иди дальше.
#217 #532686
На чем удобнее писать гуй под Шиндовс в VS2015 не вникая во всякие Qt и желательно с няшным графическим редактором? Уже давно перекатился с шарпа на кресты, но под десктоп все равно леплю на шарпаче и это уже заебало. Хетелось бы выкинуть его на помойку и забыть. Присматриваюсь к C++/CLI, но это же говно, да? Мб wxWidgets или что получше есть?
#218 #532696
>>532468

>Просто, тут есть задание, которое делать и придумывать долго, но я его, как бы, в уме решил на ++.



Total manyamiroque.

Попробуй сделай теперь это задание от корки до корки в коде, и ты увидишь, насколько твоё "решение в уме" далеко от рабочего решения. По крайней мере, у меня так было, я делал все упражнения до единого (кроме одного в седьмом кажется параграфе, я так и не понял, чего он от меня хочет в той задаче).
#219 #532741
А у вас бывает так что вы тестируете и пробуете что-то сделать, а потом РАЗ и сделали легко?
Я, просто, сегодня целый день думал над задачкой Страуструпа, 5 тетрадных листов исписал всякими логическими выводами, а в конце взял и решил спокойно. Вроде правильно (задачка по угадыванию числа от 1 до 100): https://bpaste.net/show/7585607f3462

Я сначала хотел отсеивать по ифам и вопросам, типа меньше 50, чётное / нечётное, но понял что за 7 вопросов я это не сделаю и будет ОЧЕНЬ громоздким код, потом гугланул формулу Хартли и думал как сделать её цикличной. В итоге сделал, на ваш суд.
#220 #532749
>>532686
Чем тебе QT не подходит?
#221 #532752
>>532741
Я бы вместо "if/else-if/else-if/else" сделал лесенку с отступами вправо. Кол-во веток в лесенке чётное, пустые ветки содержат ";" и больше ничего.
#222 #532753
>>532752
Не понял, что за лесенка? Свич?
#223 #532759
>>532741
Условия check == 'y' и check == 'n' ничем не отличаются.
1 Кб, 403x427
#224 #532763
>>532753
Ну вот вроде такой вроде...
Был бы свитч по любым условиям — тоже было бы неплохо.
#225 #532773
>>532759
Почему ничем? Если ввёл 'y' или 'n' или '=', то работает while.
#226 #532774
>>532773
[code lang=cpp]
if (check == 'y')
\t\t{
\t\t\tmax_value = div;
\t\t\tdiv = (max_value + min_value) / 2;
\t\t\tstd::cout << "Does the number less than " << div << "? " << std::endl;
\t\t\tstd::cin >> check;
\t\t}
\t\telse if (check == 'n')
\t\t{
\t\t\tmin_value = div;
\t\t\tdiv = (max_value + min_value) / 2;
\t\t\tstd::cout << "Does the number less than " << div << "? " << std::endl;
\t\t\tstd::cin >> check;
\t\t}
[/code]
Отличаются только 1 строчкой.
#227 #532776
>>532774

>\t\t\t


У меня 1 такое или тег код не работает?
#228 #532778
#229 #532780
>>532778
Да - не работает?
Или да - у меня 1?
#230 #532782
#231 #532789
>>532741
Бля пиздец. Как же у меня с вас бомбит. Нахуя вы спамите своим говном в С++ треде. Блять, тред посвящен языку, и вопросом о языке. Создайте тред с алгоритмическими задачамитем более у тебя не задача а хуйня какая-то на 5 минут и решайте их там. Нет, ну серьезно, зачем просто постить здесь все подряд если у треда есть четкое направление?
#232 #532790
>>532789

>у треда есть четкое направление


какое?
#233 #532795
>>532790

>C++ тред


Действительно, какое же? Ну, как мне кажется, уместнее всего было бы задавать вопросы если не понимаешь какие-то механизмы абстракци языка, нюансы работы с памятью у этого языка, его библиотеки, и подобное.
#234 #532799
>>532795
Парень пытается выучить язык путем решения этих задачек.
#235 #532802
>>532799
Они оюсуждают алгоритм. Языком там что-то не пахнет.
#236 #532829
>>532749
Бородатая библиотека уровня WPF и ебля с VS2015.
#237 #532833
>>532789
Пошел нахуй.
#238 #532835
>>532741
Ну заебись, только название переменной max_value не отражает свою сущность, ведь оно там изначально 101, а 101 не может быть.
#239 #532847
>>532833
Типичная реакция зекачера на критику и пояснения. С таким подходом ты никогда не выучишь этот язык, тем более никогда не поучаствуешь ни в каком проекте, прибывая в забвении что если твоя лапша из циклов и условных операторов проходит пару тестиков придуманных тобой же, то значит что-то получается. Посылай нахуй когда тебе говорят вполне дельные и обоснованные вещи, еще пару месяцев попишешь хеловорлды и бросишь. Хотя если не бросишь это тебе же выйдет дороже, лол.
#240 #532850
>>532847
Я вообще не он, и я все давно уже выучил. А ты иди нахуй со своим "этот тред про язык C++, а не про программы, написанные на нем"
#241 #532853
>>532847
Ебать сколько проекций в одном посте.
Мань, все у тебя будет. Но потом.
#242 #532854
>>532833
>>532850
>>532853
Поглядите, сёмочке настолько неприятно, что аж попытался соврать как он все выучил и уличить меня в проекциях. Ой лол, смешно выглядит просто, не позорься.
#243 #532862
>>532789
Ящитаю, вопросам непосредственно про язык должно уделяться большее внимание, чем алгоритмическим, но за неимением оных почему бы не подискутировать про алгоритмы на крестах? Кресты - язык многогранный, несколько тредов назад вон обсуждались ассемблерные детали, чтобы объяснить анону, как все работает под капотом. Это энивей интереснее, чем в десятый раз разжевывать долбоебам, где в памяти будет объект. Алсо, про алгоритмы на крестах есть неплохая книжка Седжвика, надо будет ее в шапку добавить.
>>532854
>>532850
И не надо ссориться, ребят. Даже самые опытные здесь все еще чему-то учатся. Треды для того и созданы.
#244 #532917
Привет Антон, я чутка оффтопну, но может повезет. Если кто тут серъезно работал(Ну или не серъезно, но сможет подкинуть материала) с аудио, может подскажете годного чтива по THD(Total Harmonic Distortion)?
39 Кб, 931x1005
#245 #532944
Подскажите, я тут пробую задание сделать, чтобы при вводе цифр или строковых цифр простенький калькулятор их считал.
Т.е. если бы я ввёл six / seven, то это было бы = 6 / 7.
В общем, я это реализовал, но как сделать так, чтобы если я ввёл сами 6 или 7 они бы определялись?

Хотя, я может задачу неправильно понял:

>Модифицируйте мини-калькулятор, описанный в упр. 5, так, чтобы он принимал на вход цифры, записанные в числовом или строковом формате.


Вот мини-калькулятор из упр. 5: https://bpaste.net/show/99f47bccd0f1 (сам сделал, довольно просто)
#247 #532950
>>532949
А другими методами никак, или логикой?
Просто, я такое еще не изучал и в книге не затрагивалась эта тема...
#248 #532956
>>532741
Ты, по-моему, умственно отсталый. Я помню эту задачу. У тебя число от 1 до 128 угадается не более чем за 7 попыток, т.к. log2(128) == 7.

Соответственно, для сотки алгоритм будет такой: есть минимальное число, есть максимальное. 6 раз берётся их полусумма и задаётся вопрос, больше ли это число. Далее меняется минимум (больше) или максимум (меньше) но полусумму.

Седьмой вопрос спрашивает, "это ли число?". Если да, овтет оно. Если нет, то ответ соседнее число.
#249 #532959
>>532944
Перечисления Страуструп тоже забыл объяснить?
#250 #532961
>>532950
Можешь и свои функции написать. Вот тебе подсказка https://ideone.com/BwfIKo
#251 #532963
>>532956
>>532959
>>532961
Что-то вы меня раскритиковали, видимо действительно я отсталый и программирование - не моё.
Ну, ладно.
#252 #532993
>>532963
Труп Страуса писал свою книгу основываясь на своих же лекциях, начисто упустив тот момент, что у студентов есть доп. литература, да и спросить у него можно. Поэтому либо менять книгу на попроще, либо страдать. Во втором случае если справишься, то научишься искать инфу в интернете и уровень знаний будет повыше. Но заебешься. Собственно советовать новичкам Страуструпа и Кнута для самостоятельного изучения это старый прикол, потому что они для этого слабо подходят.
#253 #533003
>>532993
Кстати с C без плюсов все наоборот - книга K&R была написана будто совсем для домохозяек, при том без воды. Всегда если у кого затыки в базовых вещах, советую её читать, хоть это и другой язык.
#254 #533009
a=b()+c(d(),e());
Правильно понимаю? Сначала b потом d или e порядок не определён, а потом c.
В каких ещё случаях есть неопределенный порядок выполнения?
#255 #533013
>>533009
Вычисление аргументов функций, все арифметические операторы.
Собственно, строгий порядок только у операторов && и || и ,
В с++11 что-то там подкорректировали, но не сильно.
#256 #533016
>>533013

>все арифметические операторы


b может не первой выполняться?
#257 #533072
>>533016
Какая разница? Тебе моск больше нечем выебать?
Просто не пиши контекстно зависимые функций в одну строку и фсе.
#258 #533074
>>533072
Проще же писать выражения с функциями. Потом ещё одну переменную заводить не удобно.
#259 #533095
>>533009
Нет. Сложение это обычная функция - оператор, поэтому порядок между b и c тоже не определен. В твоем примере можно гарантировать только что d и e вычислятся раньше c.
#260 #533099
>>533016
Может быть, например, в порядке d b e c a. И такое реально бывает из-за оптимизаций компилятора.
#261 #533103
>>533009
Если вспомнишь, что в C++ есть operator+, а они не хотели бы, чтобы + вел себя по-разному для POD'ов и структур, то поймешь, что в этом отношении operator+ ведет себя так же, как любая другая функция.
#262 #533125
>>532963
Кого ты блять слушаешь? А если в b тебе скажут что твоя мать шлюха ты поверишь? Если не понимаешь нихуя читай Лафоре. Там все понятно.
#263 #533264
Ubuntu 12.04 g++ 4.6.3 и выше.
выполняя код на стареньком eeepc 701 я обнаружил что время выполнения задачи всё время одинаковое-47сек(выводится самой программой), хотя секундомером мерил оно доходит до 1минуты 5 сек. И доходило до 1минуты 50 сек при двойном запуске той же самой проги, программа всё равно выводит 47секунд.Пробовал запускать на настольном пк там составило 7 сек, но не стал морочиться с загрузкой ядер-там их несколько. Может ошибка какая-то в коде?
float seconds;
clock_t sstart = clock();
unsigned long wait=0;
while(wait<4000000000)
wait++;
cout<<wait<<endl;
seconds=(clock()-sstart)/CLOCKS_PER_SEC;
cout<<"Время затраченное на складывание "<<wait<<"раз=";
cout<< seconds<<endl;
#264 #533267
>>533264
http://en.cppreference.com/w/c/chrono/clock

Returns the approximate processor time used by the process since the beginning of an implementation-defined era related to the program's execution. To convert result value to seconds, divide it by CLOCKS_PER_SEC.

Only the difference between two values returned by different calls to clock is meaningful, as the beginning of the clock era does not have to coincide with the start of the program. clock time may advance faster or slower than the wall clock, depending on the execution resources given to the program by the operating system. For example, if the CPU is shared by other processes, clock time may advance slower than wall clock. On the other hand, if the current process is multithreaded and more than one execution core is available, clock time may advance faster than wall clock.
13 Кб, 460x291
#265 #533293
Прочитал страуструпа для нюфань почти всё понял. Теперь читаю лафоре чтобы всё закрепить. Он говорит про преобразование из одного класса в другой. Если оба этих класса сам писал. Так вот. Он пишет про оператор operator. А страуструп про него ни слова не сказал. Страуструп вроде позже на 5 лет вышел. Этот оператор не убрали? Почему про него страуструп не говорил?
#266 #533295
>>533293
Потому что Страуструп хуево пишет для новичков.
Перегрузка операторов повсеместно используется.
#267 #533352
>>533295
Про операторы он писал. А это как называется? Написано про это в главе про перегрузка операторов.
#268 #533363
>>533293
Страуструп для этого конструкторы юзает, емнип.
#269 #533368
>>533363
Тогда понятно. Тут и метод с конструкторами показали.
55 Кб, 559x155
#270 #533374
>>533293
Читайте Эккеля, у него много описано того, что всякие Страуструпы забывают.
#271 #533377
>>533374
НА пике обычна перегрузка операторы вызова функции. Страуструп это не упускает.
#272 #533388
Можно ли под линукс писать скрипты на с++?
#273 #533389
>>533388
Нет.
108 Кб, 1339x470
#274 #533396
Только посмотрите на этого аутиста. Так можно делать? Так модно делать? Так хоть кто-нибудь делает?
https://2ch.hk/b/res/100321630.html#100323740
#275 #533402
>>533396
cppcms.com
Это, по-твоему для ослов спроектировали?
#276 #533405
>>533402
Это существует? Лол.
#277 #533410
>>533405
Нет, не существует. Оставайся на своем пхп, питоджанге или чем вы там пользуетесь для веба.
#278 #533411
>>533396
Гугли CGI и его развитие. В хайлоаде часто встречаются вебсервисы на плюсах.
#279 #533428
>>533293

>Почему про него страуструп не говорил?


В очи долбитесь, уважаемый. Страуструп для ньюфань порядком много операторы перегружает.
#280 #533429
>>533428
Но про такой способ не рассказывал.
#281 #533471
Сап программач. Дошел до такой упоротой темы, как указатели. И возник у меня вопрос, зачем в таком случае придумали передачу переменной в функцию по ссылке, когда есть такая вещь, как указатели?
Глянул викижопию, по ней выходит, что просто для того, чтобы все время звездочки не хуярить.
#282 #533472
Коданы, а писать в builder и qtcreator - зашквар? На текущей работе альтернатив нет, вот и думаю, если увольняься, это будет котиррваться в других компаниях или нет.
#283 #533487
>>533293
Это не просто operator, это operator float

>>533471
Затем, что указатели были в C, а ссылок там не было. А потом страуструп придумал ссылки и сделал C++. И ссылки - они типа удобнее и безопаснее например потому что нельзя с ними арифметические операции проводить.

>>533472
Не знаю, что за билдер. Qt Creator - одна из лучших IDE под плюсы. На мой взгляд из линуксовых самая лучшая.
#284 #533490
>>533472
Билдер - дохлое говно, как и дэльфи.
Qt - котироваться будет на почти на любой вакансии C++ программиста.
#285 #533497
>>533471
Ну вот есть у тебя вектор большого размера, который был где-то там, существует где-то там, но в каком-то случае в нём надо петушнуть тройку-другую элементов, может прочесть, а может изменить. Копирование не вариант не только потому что он большой, но и потому что он изменён должен быть вне функции, а не создан. Передавая ссылку, ты работаешь с собственно сущностью, а не адресом.

Вот передашь ты указатель на вектор, и что он тебе, v.size() расскажет?
#286 #533505
>>533497
Ты не знаешь про оператор разыменования или оператор -> ?

Ссылка - сахарок над указателями.
#287 #533507
>>533505
Не знаю. И знать (ПОКА ЧТО) особо не хочу, когда есть ссылки. Когда ссылки оверкилл, использую указатели.
#288 #533508
>>533507
Разыменование это унарная звездочка
#289 #533519
Задачка на нахождение простых чисел: https://bpaste.net/show/11707947f1b3
#290 #533521
>>533519
Не обязательно проверять на делимость со всеми числами меньше этого - достаточно проверить на делимость на все числа, которые меньше или равны sqrt(это число)
19 Кб, 962x187
#291 #533598
Конструктор может менять константу?
#292 #533599
>>533598
Конструктор может инициализировать константу в списке инициализации (это то, что идет после двоеточия)
#293 #533601
>>533599
Каждый конструктор может своим значением её инициализировать? Можно константу при создании объекта сделать одной, а потом присвоить её другое значение вызвав другой конструктор?
#294 #533602
>>533601
Нельзя у уже существующего объекта вызвать конструктор.
#295 #533606
>>533472
Под винду котируют MS VS и QTcreator. Под никсами обычно всем похуй, хоть в консоль пиши.
#296 #533608
>>533602
Конструктор преобразования?
#297 #533609
>>533608
Что блядь?
#298 #533613
>>533608
В любом случае конструктор вызовется только один и только при создании объекта. Либо ты называешь конструктором что-то не являющееся конструктором, либо я не понимаю вопрос.
#299 #533615
>>533609
>>533613
Если объекту типа А присвоить значение объекта типа В то вызовется конструктор А с 1 параметром В. Этот конструктор может изменить константу?
#300 #533617
>>533615
Он ничего не изменяет, а инициализирует ее. До того, как он вызовется, этой константы нет, она еще не существует и ничему не равна.
#301 #533618
>>533617
Понял. Спасибо.
58 Кб, 646x236
#302 #533627
Пикрел из Конкретная Математика, Кн-т да будет благословенно имя его.
Какого хуя, анон?
Где предположение что |z|<1 ?
#303 #533630
>>533627
Где ты тут С++ нашёл?
#304 #533637
>>533627
Либо Кнут, либо переводчик обосрался, либо там до этого было что-то написано, что ты пропустил. Скорее второе.
#305 #533687
>>533487

>Затем, что указатели были в C, а ссылок там не было. А потом страуструп придумал ссылки и сделал C++. И ссылки - они типа удобнее и безопаснее например потому что нельзя с ними арифметические операции проводить.


>



Т.е., преимуществ указателей над ссылками нету?
#306 #533689
>>533687
Над указателями можно арифметические операции проводить.
#307 #533717
>>533627

>Где предположение что |z|<1 ?


Ещё один "умник". Это формальные ряды. Буква z, x и т.п. вводится чисто для удобства и не имеет никакого числового значения.
#308 #533719
#309 #533720
Тест.
#310 #533723
Что такое method1(const int var&); и method2(float var) const;?
#311 #533738
>>533627
Кнут типа альфач, показывает что срал на математиков с их глупым формализмом.
>>533723
Объявления функций или методов.
#312 #533741
>>533738
Да, это объявления методов. Но что значат эти const у методов и int& var или int var&?
#313 #533745
>>533723
method1 - принимает в качестве аргумента константную ссылку на int.
method2 - принимает в качестве аргумента float по значению и не изменяет объект, у которого вызывается.
#314 #533758
>>533719
Хуй тебе через плечо.
#315 #533759
>>533738

>Кнут типа альфач, показывает что срал на математиков с их глупым формализмом.


У формальных степенных рядов нормально всё с формализмом. Кнут срал на зашоренных идиотов, у которых ряды == комплексные ряды.
#316 #533784
>>533759
Ты z в старшей степени не потерял, петушок? При |z| > 1 это весьма критично.
#317 #533800
>>533784
Что такое модуль из z? z это просто символ.
#318 #533806
>>533800
При z < -1 || z > 1.
#319 #533809
>>533806

> z это просто символ

C / C++ #320 #533814
Имеется массив current (тип неважен, если критично, считайте что char например, или int) размера 2 X streamsize. Имеется также файл filename размера streamsize, к которому прикреплён поток ifs:

>std::string filename{ 'd', 'a', 't', 'a' };


>std::ifstream ifs;


>ifs.rdbuf()->pubsetbuf(0, 0);


>ifs.open(filename, std::ios::binary);


>ifs.read(reinterpret_cast<char*>(current), streamsize);



Итак, мы прочли весь файл целиком и заполнили половину массива current. А теперь хотелось бы что-то типа "фигурного мемсета" -- чтобы заполнить вторую половину массива теми же самыми значениями. При этом, разумеется, не хотелось бы второй раз считывать данные с жёсткого диска.

Т.е. нужно скопировать первую половину массива в его вторую половину БЕЗ ЦИКЛА, т.е. максимально быстро. Как?
#321 #533815
>>533687
Ну если ты питаешь отвращение к new, то нет.
#322 #533830
>>533814
Без цикла никак, такие операции должна память на уровне железа поддерживать, почитай документацию к своей памяти, но врядли такое есть вообще. Подобные операции усложнят архитектуру железа, если сейчас каждая ячейка памяти соединена с шиной, то для таких операций её еще нужно соединить со всеми остальными, что дорого. Там скорее всего есть поблочное копирование, собственно в памяти GPU сразу блоками копируется, но это блок, если данные не влазят в блок то без цикла все равно не скопируешь. А в обычной памяти и того может не быть.
#323 #533831
>>533814
>>533830

>собственно в памяти GPU сразу блоками копируется


И ещё это делают контроллеры DMA, есть в книгах Таненбаума. Перенёс байты — и прислал прерывание.
#325 #533858
>>533848

> implying memcpy не использует цикл

#326 #533866
>>533814

>ifs.rdbuf()->pubsetbuf(0, 0);


Зачем эта строка и зачем нули? То что это буфер я понял, а почему ты его убрал нет.

>ifs.read(reinterpret_cast<char*>(current), streamsize);


Тут reinterpret_cast зачем и почему используешь read?
#327 #533895
Что такое реалтайм? Гуглиться что-то странное. На С++ в этом работу найти можно? Что для этого нужно изучать?
#328 #533907
>>533895
Возможно, это то, для чего создаются всякие FreeRTOS. Дальше гугли сам, потому что я подробностей не знаю.
#329 #533914
>>533907
Ты на работе что делаешь?
#330 #533922
>>533914
Ничего, я не работаю
#331 #533926
>>533922
Есть где список что делают С++ программисты? Не список вакансия, а статистика в какой области работа.
#332 #533938
>>533895
Реалтайм системы - это системы с фиксированным временем отклика. Разруливает все это планировщик ОС. Прикладные программы должны корректно обрабатывать сигналы.

Теперь вопрос - где здесь с/с++?
#333 #533947
>>533938

>Теперь вопрос - где здесь с/с++?


Спросил чем на С++ занимается. Сказали что-то про реалтайм где высокая производительность нужна. Спросил тут что это. Чем обычн С++ программисты занимаются?
#334 #533950
>>533938

>Теперь вопрос - где здесь с/с++?



Они пишутся на C и C++, очевидно.

где-здесь-C++-кун, заебал
#335 #533956
>>533947
Тем же, чем и другие программисты - пишут код, решают проблемы, создают системы. Си и плюсы чуть ближе к железу, больше простор для оптимизаций, поэтому их используют там, где нужна скорость и компактность: встраиваемые системы, высокопроизводительные системы (веб сервера тоже).
#336 #533964
>>533956

>встраиваемые системы, высокопроизводительные системы (веб сервера тоже).


Ну вот веб сервер это наверно интересно. Где про это почитать? Может кто из работающих рассказать про свой последний проект?
#337 #533967
>>533956
За себя могу рассказать ещё: работал в компании, создающей софт для биржевой торговли - от краулеров биржевых данных, которые прям на самих биржах крутятся, до клиентских терминалов. Там такой хайлоад и тайм-критикал, что пиздец.
Сейчас работаю в компании-производители автомобильной (и не только) навигации - встраиваемые системы, девайсы, онлайн-сервисы. А в основе всего ядро на плюсах. Тут и мемори-критикал и тайм-критикал. А еще ограничения железа всякие.
#338 #533968
>>533964
Апач, нгикс, тысячи их.
0 Кб, 458x211
#339 #533969
>>533964

>Где про это почитать?


В книжках Ричарда Стивенса об устройстве сетей и серверов (у него две или три книги).

>Может кто из работающих рассказать про свой последний проект?


Примерно как на картинке. Основной процесс вызывает функцию «fork()» и дальше они работают раздельно.
#340 #533972
>>533967
Нынешняя твоя работа наверно тоже интересная. Почитал про FreeRTOS и там вроде надо железо покупать. А я только 21 день учил С++ и хочу по инструкции сделать какой нибудь проект. Ради подобного баловство покупать железо не хочу. Есть какие нибудь симуляторы и инструкция как какой-нибудь простой проект с нуля?

>>533969
Какая книга?
http://www.books.ru/books/unix-razrabotka-setevykh-prilozhenii-82359/
http://www.bhv.ru/books/book.php?id=651
Где твой код потом будет?
#341 #533974
>>533972
Qt

На Си++ пишут софт на Qt

сотни тысяч его, сделай что-то свое
еще игры делают
#342 #533979
>>533974
Это не очень интересно выглядит. Хотел что низкоуровневое или связное с сетями. Но если не осилю, то можно и в Qt.
#343 #534025
>>533979
Поковыряй работу с устройствами - прямая работа с USB, например, - чтение и запись напрямую. Сделай из флешки токен авторизации. Под линукс - pam, под винду - логон менеджер.
#344 #534046
>>534025

>pam


Есть книга где научат? Или по документации делать?
#345 #534056
Начал изучение по шилдту, все жутко интересно но есть такое ощущение что я аутист и жутко медленно продвигаюсь
Кто за какое время осилил данную книгу? И эффективно ли будет попутно второй язык изучать? Или нет смысла?
#346 #534107
>>533858
нет, не использует
#347 #534117
>>534107
понятно, что в конце концов будет что-то вроде rep movs
#348 #534140
>>534046
Just google it
#349 #534142
>>534056
Если кто-то проглотил эту книжку за несколько дней - тебе легче станет? Учишь ты, а не кто-то. У тебя свой темп.

Другой язык лучше не брать. Разве что си или асм.
#351 #534156
>>534147
тупая шутка про хохлов

Тебя научить гуглом пользоваться?
#352 #534159
>>534156
Гугл нашел много коротких статей и 2 книги на английском. Что читать я так и не понял.
#353 #534252
>>533848

>memcpy



Похоже на то, что нужно. Единственный момент:

>нужно скопировать первую половину массива в его вторую половину


>If the objects overlap, the behavior is undefined.



Что здесь подразумевается под "перекрываются"? Да, это один и тот же массив, но две половины не перекрываются физически. Это подпадает под overlap?
#354 #534264
>>534252
это значит что ты копируешь область памяти в другую область памяти и эти области не пересекаются. Джае в твоем случае, ты разбиваешь массив на две непересекающиеся области.

Требование non-overlapped для производительности - нет доп проверок и лишних копирований во временную область.
#355 #534267
>>533741
Const у методов значит что этот метод можно вызывать даже если объект константный. А int& это ссылка, т.е. ты будешь менять ту переменную, которая передается как аргумент, а не ее копию.
#356 #534309
>>534264

>Требование non-overlapped для производительности - нет доп проверок и лишних копирований во временную область.


Спасибо, это я прекрасно понимаю сразу после прочтения en.cppreference. Но там не было уточнено, что такое overlap.

А можно пример копирования одной половины массива в другую половину того же массива? А то я с указателями не работал никогда (C++ мой первый язык). На моём же примере как это написать:

>std::string filename{ 'd', 'a', 't', 'a' };


>std::ifstream ifs;


>ifs.rdbuf()->pubsetbuf(0, 0);


>ifs.open(filename, std::ios::binary);


>ifs.read(reinterpret_cast<char*>(current), streamsize);



>далее везде @ вместо звёздочки из-за макабы



Напомню, что current имеет размер в байтах 2 X streamsize, но заполнен ровно на первую половину. Как теперь скопировать его первую половину во вторую половину?

std::memcpy(void@ dest, const void@ src, std::size_t count);
Т.е. как-то...

>std::memcpy(???, current, streamsize);

1146 Кб, 1200x800
#357 #534312
Господа, может ли кто-то поделиться кряком для clion под линукс? Очень надо, в гугле грустинушка.
#358 #534329
>>534309
dest = src + размер данных
Если размер массива 100 байт то должно быть что-то типа, только проверь что тип src указатель на void или char, иначе там при суммировании скорее всего хуита получится
std::memcpy(src + 50, src, 50);
#359 #534341
>>534329
У меня uint16_t current размера 2 X streamsize (в байтах). То, что это массив short unsigned int (uint16_t), не критично для указателей memcpy? Вот я в этом не разбираюсь. То, что размер всего массива именно в БАЙТАХ мне точно известен как 2 X streamsize, я могу гарантировать. Тогда получается так:

std::memcpy(current + streamsize, current, streamsize);

или же мне нужно лепить какие-то там реинтепрет_касты в указатели на чар?
#360 #534386
>>534341
Проблема в арифметике указателей. В зависимости от типа current суммирование даст разные результаты. Ты должен посмотреть какого типа у тебя current (указатель на uint16_t), определить размер буфера в том типе указателем на который является current (если я правильно тебя понял это streamsize) и прибавить половину от размера буфера. Если current имеет тип указатель на uint16_t то прибавлять нужно streamsize/2 (если размер буфера выраженый в uint16_t является streamsize). Если current имеет тип указатель на void/char то прибавлять нужно streamsize (половина от размера буфера в байтах, который равен 2*streamsize). Если ошибок нет то кастить ничего не надо, будет неявное приведение. Для явности можно и добавить, но помоему это только читаемость ухудшит, вообще это внутрення реализация которая не должна наружу вылазить, если бы memcpy писали сейчас, то она скорее всего была бы шаблоном, а не принимала указaтели на void.
#361 #534420
>>534386

>Проблема в арифметике указателей.


Я вот их и не понимаю. Совсем. Далее я запутался. Я ещё раз повторю: У меня есть массив uint16_t current[n]. Его размер в байтах (именно в байтах) равен 2 X streamsize, причём данное значение не зависит от количества бит в байте (8 или 16). Я пишу кроссплатформенно. Т.е.

>std::streamsize streamsize = sizeof(uint16_t) * n / 2;



Где std::size_t n -- (обязательно чётное) количество элементов массива uint16_t current. Так как теперь будет выглядеть строчка

>std::memcpy(current + ???, current, ?);



если мне нужно первую половину массива uint16_t current скопировать в его вторую половину?
#362 #534435
ну охуеть теперь
не может копирнуть полмассива в другую половину при помощи memcpy
#363 #534442
>>534435
Без понятия, как там осуществляется сложение указателей: сложение адресов байтов или положений конкретного элемента.

Для чара это будет совпадать, для остальных типов нет.
#364 #534522
>>534420
Запили свой код на ideone.com, чтобы понятно было, как у тебя работает, а анон тебе покажет, как в твоем случае вызывать memcpy.
#365 #534654
>>531254 (OP)
Как дела сейчас на рынке вакансий в рашке и мире?

Судя по всему надвигается чудовищная жопа в мире по сравнению с которой 2008 год был бурей в стакане, а значит кто-то соснет.

Вангую, скоро вакансии в бодишопах будут на вес золота.
#366 #534666
>>534654
Вы недостаточно прочитали Ганса и Армадиллу.
В те времена доллар был дёшев, а рубль относительно дорог. Сейчас наоборот.
Поэтому ежели и случитьса жоппа, то другая.
#367 #534669
>>534666

>Поэтому ежели и случитьса жоппа, то другая



Это какая например?
#368 #534673
>>533630
Нахуй пошел, ок?
#369 #534675
>>533717
>>533759
Где ты видел комплексные ряды, пидор? Если z любой z больше 1, то ряд расходящийся, и нет у него асимптотической суммы.
Ебнутый ты даун, у меня просто РЕКУРСИЯ от мамкиных математиков, немогущих в детские ряды.
#370 #534676
>>533627
При |z| >= 1 в бесконечной сумме возникает undefined behavior поэтому на корректность утверждения всем насрать. Оптимизацию впервые увидел чтоли? Точно по той же причине, например, компилятор вправе проебать все твои проверки указателей на нуллы если ты до них пытаешься указатель разыменовать - на нулле это неопределенная операция, поэтому предполагается, что так не бывает.
#371 #534687
>>534676

>впервые увидел чтоли?


Ну, я какбы нуб...
#372 #534688
Так в чем же отличие между "int *a = new int;" и "int a;"? Во втором случае нельзя удалить переменную что-ли?
#373 #534689
>>534688
Анус себе удали.
#374 #534690
>>534688
В первом случае она будет расположена в куче, а во втором — в стеке.
#375 #534692
>>534669
Проезд на мётрах 100500 млн.руб.
И ето токо в одну сторону!!!
#376 #534700
>>534690
И в чем разница?
#377 #534704
>>534692
Оно-то будет, проблема в том, что раньше хотя бы от этого можно было съебать, а теперь ПРИДЕТСЯ ЭТО ТЕРПЕТЬ, потому что по всей видимости упадет спрос на программистов в мире в целом, а предложение на рынке труда только вырастет за счет выкинутых на улицу в период крузиса.

На внутреннем рынке работы тоже уже стало меньше, хотя мы дно еще даже не нащупали.
#378 #534725
>>534704
Крах дот-бума бодижопы как-то пережили, новых даже наплодилось.
#379 #534744
>>534700
Бамп вопросу. Между статической и динамической памятью отличия знаю.
мимо
#380 #534747
>>534744
Ссылку на что-то в куче ты можешь использовать в другом треде, например, а стек у каждого треда свой.
#381 #534760
>>534688
int a - будет в стеке, удалится при завершении scope'а, это быстрее, чем выделять память в куче

int* a = new int; - создастся в куче, это медленнее, потому что надо запрашивать память у операционной системы, не удалится при завершении scope'а, а удалится когда удалишь.
#382 #534770
>>534744
С аппаратной точки зрения - стек = процессор, куча = оперативка.
#383 #534776
>>534760
А если, например, есть цикл, а в нем есть "long a, b, c, d = 0;" и "double e, f, g, h, j, k = 0;", то что будет быстрее - выделить один раз перед циклом в оперативке, или каждую итерацию выделять в стеке? Я предполагаю, что компилятор может выделить один раз в стеке, а потом просто каждый раз сбрасывать значения, - этот вопрос скорее относится ко всяким функциям, которые едят входные данные и возвращают результат. Насколько дорого по скорости обходятся такие выделения, и стоит ли экономить на вспомогательных переменных в таких функциях?
#384 #534784
>>534776
Ну, если компилировать с каким нибудь -o2 -- ещё и не такое сделает. Нет, стёк будет быстрее даже если каждый раз выделять по новой. Нет, экономить на переменных не стоит, прироста ты не увидишь (если у тебя не будет овер 9000 раз выделятся по мегабайту в цикле). Выделять память в куче и передавать её по указателям стоит только тогда, когда объём информации = овердохуя. Даже чтобы передать какой нибудь long long куча себя не оправдает. А вот если например есть 5 мб текста - оправдает многократно.
#385 #534786
>>534770

>стек = процессор


Ловите наркомана.
sage #387 #534805
>>534792

>В архитектуре X86 аппаратный стек — непрерывная область памяти

sage #388 #534808
>>534744
Разница в том что стек фиксированного небольшого размера и очищается автоматически, плюс если от стековой переменной нигде не берется адрес то компилятор ее может в регистры запихать. Больше никакой.
>>534747
Ссылку на стек тоже можно передать, только надо сделать какой-нибудь лок чтобы он не уничтожился выходом из функции.
#389 #534811
>>534700
в первом случае еще нужно будет вручную удалить потом
#390 #534821
#392 #534849
Поясните нубу как работает брейк, а то я не совсем понимаю.
Как я понял - как бы глубоко он не был, он останавливает всегда весь цикл?
Т.е. например:
for ...
if
if
break - тут он останавливает (если сработает) 1 ступень цикла for как глубого в ифах он бы не был?
sage #393 #534858
>>534831
И что?
#394 #534881
>>534849
Да. Можно даже сказать, что это локальный return, если тебе так будет понятней.
#395 #534904
>>534770
Это не правда
#396 #534905
>>534776
Можно считать, что "выделять" что-то в стеке - вообще бесплатно, потому что на самом деле там ничего выделять не надо в отличие от динамической памяти, а надо всего лишь значение регистра изменить.
#397 #534907
>>534849
Брейк останавливает самый внутренний цикл.
#398 #534910
>>534849
Да, break останавливает ближайший (наиболее вложенный) for/while/do/switch, на if и простые { блоки } не влияет.
#399 #534913
>>534910
>>534907
Причем самый вложенный цикл определяется статически во время компиляции. То есть например ты не можешь создать функцию без каких-либо циклов, написать в ней break и надяться, что если ты ее запустишь из цикла, то break сработает.
#400 #534925
>>534744
Выделенная в куче память доступна на протяжении работы программы. Если ты выделяешь ее, например, внутри функции, и забываешь освободить, то ты допускаешь утечку памяти. Твоя программа начинает пожирать все больше и больше с каждым вызовом функции, пока система не начнет сбрасывать то, что не помещается, в файл подкачки. Частые выделения и освобождения произвольных кусков памяти разного размера приводят к быстрой фрагментации (Образуются дырки между выделенными участками памяти), что может замедлить работу программы.

Память, выделенная на стеке, "освобождается" с выходом из функции. Выделение памяти на стеке происходит гораздо быстрее выделения в куче. Стек по определению не подвержен фрагментации. Размер стека потока много меньше размера памяти доступной ОС, поэтому выделять на стеке в циклах не рекомендуется.
#401 #534968
>>534925

>Размер стека потока много меньше размера памяти доступной ОС, поэтому выделять на стеке в циклах не рекомендуется.



Что это вообще значит? Как ты можешь выделять все больше и больше памяти в стеке циклом, а не рекурсивной функцией?
#402 #534978
>>534968
Можно зделоть
https://msdn.microsoft.com/en-us/library/wb1s57t5.aspx
Ну он еблан явно и не поинмает, что пишет, но в теории это возможно
#403 #534982
>>534968
По-читерски, можно в цикле плодить threads, первым закончится именно стек.
#404 #534985
>>534968
По-читерски, можно в цикле плодить threads, первым закончится именно стек.
#405 #534986
>>534982
У тредов свои собственные стеки, а сегменты памяти могут расти. Поясни своё высказывание
#406 #534987
>>534982
У тредов свои собственные стеки, а сегменты памяти могут расти. Поясни своё высказывание
#407 #534998
>>534987
Все популярные конпеляторы/libc выделяют стек на процесс статически, плодя треды, ты это пространство быстро израсходуешь.
#408 #535065
Почему я иногда вижу фигурные скобки в списке инициализации? Я всегда круглые делал. Это имеет какое-то значение?

>Handle(Handle&& h) :p{h.p} { h.p=nullptr; }

#409 #535069
>>535065
g://c++ uniform initialization
#410 #535130
>>535065
В c++11 ввели uniform initialization
#411 #535131
>>534998
В Windows набор страниц для стека у каждого потока свой, размер выставляется явно, лимита на общий размер стеков всех потоков нет.
#412 #535148
>>534309

> Спасибо, это я прекрасно понимаю сразу после прочтения en.cppreference. Но там не было уточнено, что такое overlap.


Это когда ты берёшь первые 2/3 массива и копируешь их в последние 2/3 массива. Или вместо 2/3 берёшь полмассива с округлением вверх.
#413 #535337
>>533352

>А это как называется?


Оператор приведения типа.
#414 #535349
>>535337
Спасибо. Уже забыл про эту главу.
#415 #535416
Каким образом в конструктор класса можно передать функцию, так, чтобы переопределить метод?
Конкретно, хочу реализовать кучу, в которой бы в конструктор можно было передать функцию сравнения двух элементов.
Попробовал через указатель на функцию, но выглядит по-идиотски.

template <class T>
class MinHeap {
private:
bool (cmp)(T, T);
public:
MinHeap() {

}
MinHeap(bool (
cmp_func)(T, T)) {
cmp = cmp_func;
}
};
#416 #535423
>>535416
для этого придумали наследование, интерфейсы, абстрактные классы. А ты продолжаешь работать в C-style
#418 #535471
>>535423
У него же наверное инъекция зависимости.
>>535416
Есть вариант функтор передавать. Много лишней писанины, но более гибкий и надежный (контроль типов, можно передать только нужные функторы а не любую функцию с подходящей сигнатурой).
#419 #535512
>>535416
Наверняка ты хочешь сделать полную хуйню, которую не надо делать, но если все же надо, то принимай в конструкторе аргумент типа std::function, инициализируй им член и его и используй.
#420 #535588
Вопрос по Qt.

При попытке запустить debugging выдаёт "no debugger set up".

Дебаггер не идёт в комплекте с creator?

Можно ли задействовать debagger от visual studio?
#421 #535589
Чем отличаются MinGW, MinGW-64 и Cygwin? Кроме названия
#422 #535619
>>535589
Насколько я помню, в cygwin есть полностью все библиотеки юниксовые, то есть там есть даже реализация юникс форка под винду. В mingw насколько я знаю, этого нет.

А по названию предположу, что MinGW-64 - под архитектуру x86_64, а MinGW - наверное x86.
#423 #535620
MinGW - это minimalist gnu for windows, минимум необходимого для компилятора. А вот cygwin - это йоба
#424 #535672
>>535589
mingw - для разработки нативных приложений под винду, вроде как заброшен, а разработка продолжается в mingw-w64, который может не только в 32 бита, но и в 64. Cygwin - эмуляция позикса под виндой, типа как wine на лине работает, некоторые хардкорно линуксовые приложения могут поддерживать конпеляцию под cygwin, но не под mingw, т.к. разрабы срали на поддержку винды.
#425 #535676
>>535672
>>535620
>>535619
А вы с ними делали что-нибудь? А то у меня на Eclipse CDT и MinGW иногда дебаггер отваливается.
#426 #535724
>>535427
Спасибо!
>>535471

Но, что в случае функтора, что в случае передачи непосредственно функции, мне непонятно, как сделать дефолтный метод, если в конструктор не был передан аргумент.
#427 #535730
>>531254 (OP)

А книги из оппоста разве актуальны?
#428 #535754
>>535724
Дефолтным методом делаешь оператор сравнения.
#429 #535786
>>535730
Тебе какая-то конкретная книга нужна?
#430 #535787
Раз скоро перекат, ОП добавь в список книг про алгоритмы на С++. На С фамилия автора. У него ещё вроде несколько томов и книга по яве.
#431 #535789
Спрошу ещё по указателям. Есть два массива типа int одинакового размера, которые созданы с помощью malloc:

array_1 = (int@)std::malloc(array_size);
array_2 = (int@)std::malloc(array_size);

@ вместо *, как вы догадались. Далее, например, выполняем в цикле присваивание всех элементов array_1.

Вопрос. Что сделает инструкция:
array_2 = array_1;

?
#432 #535790
>>535789
тип array_1 и array_2 - int@? То есть это указатели на int? Если да, то присваивание делает так, что array_2 указывает туда же, куда и array_1.
#433 #535791
>>535789
Записывает адрес array_1[0] в array_2[0]
https://ideone.com/OncbYL
#434 #535800
>>535131
Ну в Windows свои приколы, http://blogs.msdn.com/b/oldnewthing/archive/2005/07/29/444912.aspx
если 32 бита ещё кому-то интересны, конечно
#435 #535825
>>535787
Седжвик
#436 #535851
>>535588

> При попытке запустить debugging выдаёт "no debugger set up".


> Можно ли задействовать debagger от visual studio?


В настройках (внезапно) задается путь к дебаггеру, какой тебе нужен, раз сам не нашелся.

> Дебаггер не идёт в комплекте с creator?


Qt Creator это ide, всё. Кроссплатформенная причем, везде со своими дебаггерами. Впрочем, под виндой, насколько помню, можно в комплекте с MinGW накатить, там тебе все мокрописьки из коробки будут.
#437 #535858
>>535851
Мне пришлось windows sdk tools скачать. У меня насколько я понял не mingw, а msvc.
Сотственный аллокатор #438 #535859
Мне в программе нужно создавать миллионы объектов разных видов, и иметь возможность уничтожить их в долю секунты. Стандартный delete их убивает по одному очень долго.
Поэтому написал свой аллокатор по типу pool. Я знаю, что в бусте есть то же самое, но мне было интересно научиться, к тому же, мой аллокатор в итоге работает чуть быстрее даже.

Для легкости встраивания в уже большую к тому времени программу, я создавал этот аллокатор как отдельный шаблонный класс со статическим пулом, статическими операторами new и delete (посмотрел - в инете так обычно и советуют), и, чтобы его использовать, достаточно просто наследовать от него нужные мне классы.
Например, так:
class Node : public FastpoolAllocator<Node>
И всё! Теперь, чтобы создать объект Node, можно это делать, как обычно: Node* node = new Node();
При этом, так как пул и все остальное статическое, сами объекты не вырастают в размерах, и имеют общий пул, который можно очистить, обратившись к соответствующему статическому методу аллокатора.

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

Проблему можно решить, если создавать отдельный класс аллокатора и объект, и потом, обращаясь к этом объекту, выделять память. Но это неудобно, придется переписывать все текущие создания объектов, сделанные красиво, как new.

Может, есть какой-то другой способ, позволяющий сохранить синтаксис new и deleteб но привязывающий пулы к конкретным экземплярам плагина?
#439 #535861
>>535859
А, ну или еще можно передавать в доппараметрах к new и delete указатель на пул или сам аллокатор, это не так сильно меняет синтаксис, но всё-равно придется все выискивать.
#440 #535876
https://bpaste.net/show/f17675342b8c - нахождение простых чисел методом решета Эрастофена.

Кстати, я заметил что мне проще решить задачку, расписывая её в тетради, а потом уже перенося в программу, а не сразу. Т.е. в тетради я сразу вижу ошибку, а в программе нет - значит я устарел или вы так же делаете?
#441 #535910
>>535825
Да. Он. Добавь в шапку. Скоро его начну читать.
#442 #535945
>>535861
А ещё проще — воткнуть RAM-семафор, он же lock, выбрав самый быстрый. Тогда доступ к области памяти из двух потоков пойдёт синхронно.
>>535876
Я тоже так делаю.
#443 #535949
>>535861
Или, если не нравится семафор, есть ещё thread local memory, можно оставить указатель на пул в ней.
#444 #535958
>>535876
А оно правильно работает? А то ведь если ты в векторе делаешь erase, то его .size() изменяется
#445 #535966
>>535958
Работает правильно, я так и задумывал с удалением и изменением размера вектора.
Например: берётся число 2, удаляются все числа, которые делятся на 2 без остатка и вектор сокращается на это число. Потом берётся число 3, и проверяет деление уже оставшихся чисел - это суть решета Эрастофена.
#446 #535973
>>535949
Нет, проблема не в многопоточности. Это у меня в самом аллокаторе уже реализовано. Проблема в двух экземплярах одного плагина - обе они используют один и тот же пул, потому, что пул объявлен как static, чтобы быть общим для всех объектов класса, унаследованного от FastpoolAllocator. В рамках одного плагина это даже удобно.
#447 #536435
Вызывать деструктор обьекта в методе класса ведь не противозаконно?
#448 #536437
>>536435
Ты слишком обще и непонятно написал, так что могу сказать лишь что вызывать вручную деструктор - легально.
#449 #536441
bomb.blow_up();
cbobmb::blow_up
{
//четоделаем
//вызываем деструктор объекта
}
#450 #536446
>>536441
Деструктор того объекта, чей метод вызывается?
#451 #536447
>>536446
Естественно.
#452 #536491
>>536447
Делать так можно, но надо быть аккуратнее с дальнейшим использованием объекта. Такое применяется часто для синглтонов, когда некий статический метод уничтожает объект синглтона
#453 #536492
>>536491
Как правильно организовать самоуничтожение объекта? Как-то глупо, если за вызов деструктора для той-же бомбы отвечает внешняя среда.
#454 #536527
>>536492

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


Почему глупо? Это правильный подход когда тот кто создает объект его же и уничтожает. Это конечно же не всегда можно красиво сделать, например когда объект используют в нескольких других местах - в таких случаях лучше шаред поинтер навернуть, который и удалит объект когда он станет не нужен. А так как объекты сами не принимают решение о своем создании, делать так чтобы объект сам себя удалял нужно только когда это действительно упрощает программу.
#455 #536531
Аноны, недавно я просто угорел по указателям! Я использую их везде, даже в циклах!

for (int i = new int(0); i < 3; (*i)++)

Насколько это плохо и стоит ли бросать?
sage #456 #536535
>>536531
Аллокация на стеке намного быстрее
#457 #536536
>>536535
Сажа приклеилась
#458 #536566
>>531254 (OP)
Надо работать с базой postgersql на vs15, что посоветуете?
#459 #536570
>>536531
new это долго
#460 #536590
А какой софт вы вообще пишите?
#461 #536671
>>536531
Это глупо и бесполезно, местами вредно. Умерь пыл.
#462 #536702
>>536531
Эта хуйня нихуя работать не будет. Ты звёздочек забыл, долбоёб.
И да, сука, кипяти океаны бесполезными операциями.
#463 #536762
>>531563
Страуструп как раз-таки стандарт не читает, судя по его книге по C++11 для ньюфагов.
#464 #536803
>>536762
Чукча не читатель, чукча писатель. Вообще, последнее издание "языка C++" уже с учетом всех фишек C++11, но оно пока только на ангельском.
>>536531
Перетолстил, братюнь.
>>536535
Там память утекает, скорость это еще не самое страшное.
>>536492
Так они ведь и так "самоуничтожаются". Деструктор вызовется при выходе из области видимости автоматически, в случае кучи можно просто использовать unique_ptr, и будет тоже автоматически удаляться.
>>535910 >>535787
Ага. Тащемта, это я и написал выше, что стоит ее добавить.
>>535789

>2015


>malloc


>>535730
Они самые актуальные из существующих на русском, а в большинстве случаев и вообще только у нескольких русские издания отстают. Все старые книжки там не на тему синтаксиса, поэтому советы актуальны и сейчас почти все. Например, книги о шаблонах довольно старые, но лучше за десять лет ничего не написали, а большая часть информации осталась полезной, хотя с variadic templates многое стало можно сделать проще.
>>534786
Он, возможно, имел в виду регистровые буферы, регистровые окна и вот это все.
#465 #536812
>>536803
Что ты имеешь против маллока?
#466 #536817
ITT буду задавать дебиль ные вопросы по Qt.
Если я наследуюсь от QObject и вставляю Q_OBJECT макрос, будут ли объекты моего класса автоматически удаляться?
#467 #536847
>>536817
Зависит от условий. В общем случае не будут.
#468 #536850
>>536812
new это встроенный оператор, он может быть реализован компилятором гораздо эффективнее, чем вызов malloc, который обязан передаваться ОС. Юзать пул, например, или использовать данные об объектах, для которых выделяется память, чтобы уменьшить фрагментацию и позволить данным лучше кэшироваться в результате.
#469 #536852
>>536847
Ок, добавлю delete. А когда будут?
#470 #536856
>>536702
Звёздочку съела макаба. Смотри, там же курсив пошёл.
#471 #536858
>>536671
Я уже не могу смотреть на переменные без приставок. Например int i; Ну что это такое? Вот понимаю - int *i; Да, это классно смотрится. Ещё есть какие-то reference. Расскажите про них?
18 Кб, 300x291
#472 #536875
#473 #536897
Вот еще 2 вопроса:
[code]

QObject::connect(view, SIGNAL(loadFinished(bool)), slot_wrapper, SLOT(callback(bool)));

[/code]
Можно ли его вызывать с лямбдой вместо обертки над слотом? Как передать в колбэк сам QWebView *view, к которому аттачим листенер?
#474 #536906
>>531254 (OP)

> Оффициальный


одна ф
#475 #536927
>>536852
Объект в крестах удаляется только тогда, когда ты вызываешь delete, либо когда он выходит из скоупа (впрочем, во втором случае опять же неявно вызывается delete). Для указателя это тоже верно: сам указатель удаляется. А вот объект, на который он указывает - нет. В Qt нет никаких специальных GC или чего-то подобного, так что все сводится к вызову delete и выходу из скоупа. Пллюс еще, если у объекта есть родитель, то при удалении родителя будет удален и этот объект (и все другие дочерние объекты).
sage #476 #536929
>>536906
Ловите мелкобуквенного ньюфага.
sage #477 #536931
>>536897
Можно. QSignalMapper + дальше qobject_cast.
#478 #536933
>>536929

> сделал орфографическую ошибку


> я всё правильно написал а ты ньюфаг и не понимаешь глубокого смысла

#479 #536935
Я верю, что тут знают. Как мне из Visual Studio 2010 выдрать компилятор, и прочие хэдеры/либы? Накатывать саму студию займет слишком дохуя места, да и как IDE она мне не нравиться.
#480 #536940
>>536935
Зачем тебе именно VS2010?
#481 #536942
>>536940
2012 на ХР уже не работает.
#482 #536946
>>536942
Поставь MinGW.
#483 #536947
>>536935
Хэдеры лежат в "путь_к_папке_с_программой\VC\include", причем у стандартных нет расширения, поэтому придется добавить .h. cpp файлов вообще нигде нет, как и объектников, соответствующих единственному хэдеру. Те объектники, из которых все собирается, лежат в "путь_к_папке_с_программой\VC\bin", но там хер проссышь, какие именно линковать вручную, а для подмены с другим компилятором вряд ли подойдут, ибо внутренние форматы зело разные.

Советую не париться с либами и другим компилятором, а накатить отдельно Visual C++ как когда игоры устанавливаешь, можно будет компилировать из консольки.
#484 #536949
>>536935
Кодблокс сам у тебя спросит какой компилятор использовать если хочешь сменить IDE но оставить компилятор.
#485 #536952
>>536946
Там наркоманский at&t синтаксис ассемблера.
>>536947
Последнюю строку нихуя не понял, подробнее.
>>536949
Как ты узнал, что я на него решил перекатиться Для этого нужно тогда снести саму студию, но оставить компилятор и прочее, ибо 80гб хард - это не шутки.
#486 #536953
>>536927
А как Qtшный смартпойнтер называется?
>>536931
Спасибо, покурю
#487 #536954
>>536933
Детка, это /pr, тут еще есть олдфаги, которые помнят, как это слово нужно писать на двачах.
#488 #536956
>>536952
Ставишь Visual C++ отдельно, без студии. В папке с ним будет бинарник, которым можно компилировать из консоли, как с gcc.
#489 #536958
>>536956
Так, уже лучше. Redist что-ли?
#491 #536966
>>536961
Внезапно обнаружил у себя в закладках. Спасибо, пойду ставить.
sage #492 #536980
>>536953
QPointer, как ни странно.
#493 #537109
>>536850
Оператор new определён в libstdc++, а это не компилятор хоть и идёт, обычно, вместе с ним.
И точно так же как и маллок должен идти в ОСь, ибо откуда он память возьмёт? А зачастую он вообще маллок и пользует.

>>536856
Ну тогда откат наезда. Заработает, съест память, вскипятит океаны и заработает...
И да, кто освобождать-то память будет?
#494 #537125
>>537109
Не путай оператор new и функцию operator new. Первое - часть ядра языка, которая не имеет отношения к библиотекам, жестко зашитая в компилятор. Второе - обычная перегружаемая библиотечная функция.
Память она возьмет, но гораздо реже, чем голый маллок. Например, она может брать ее сразу по мегабайту и потом раздавать по кусочкам, или использовать хитрые платформозависимые стратегии.
#495 #537131
НОВЫЙ ТРЕД
https://2ch.hk/pr/res/537129.html
https://2ch.hk/pr/res/537129.html
https://2ch.hk/pr/res/537129.html
Чтобы ночью не караулить бамплимит. Добивайте этот и переходите.
#496 #537134
>>537131
Ссылку нормальную сделай.
#497 #537142
>>537134
Какую ссылку? Эта тройная нормальная, открывается, не?
#498 #537148
>>537142
Такую, какая у тебя в первой строке.
#499 #537793
sage #500 #539530
[code]рпрп[/code]
sage #501 #539531
[code]
рарпр
[/code]
Тред утонул или удален.
Это копия, сохраненная 26 сентября 2015 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски