Сохранен 501
https://2ch.hk/pr/res/531254.html
Прошлые домены больше не функционируют, используйте адрес ARHIVACH.HK.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Оффициальный™ традиционный® C++ тред #5

 Аноним 16/08/15 Вск 22:25:37 #1 №531254 
14397531377310.jpg
О божья месть, как тяжко устрашен
Быть должен тот, кто вскоре прочитает
Тот код, что в этом треде был рожден!

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

Вновь корчатся в терзанье вековом,
Узрев 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)
Аноним 16/08/15 Вск 22:28:20 #2 №531258 
Предыдущие треды на архиваче:
https://arhivach.org/thread/94971/
https://arhivach.org/thread/94972/
https://arhivach.org/thread/99414/
https://arhivach.org/thread/100995/
Аноним 16/08/15 Вск 22:29:14 #3 №531259 
>>531200
http://habrahabr.ru/post/256443/
Аноним 16/08/15 Вск 22:30:23 #4 №531262 
>>531245
А можешь пояснить насчёт этого всего? Чем вообще лучше пользоваться для констант? #define, enum, const, constexpr? Что для чего?
Аноним 16/08/15 Вск 22:35:57 #5 №531264 
14397537572380.jpg
Что я сделал не так? Почему вместо моей пятерки он считал мне хуй пойми что?
Аноним 16/08/15 Вск 22:40:37 #6 №531265 
Аноны, а можно сделать, чтобы объект класса создавался автоматически? Примерно как cout. Я же не пишу ostream cout, а сразу начинаю им пользоваться. То есть охота сделать класс с одним статическим объектом. И если подцепляю хедер, то он у меня автоматом создаётся объект. Как такое вообще можно провернуть? Хотя бы примерно.
Аноним 16/08/15 Вск 22:45:21 #7 №531266 
>>531264
Потому что ты открыл файл на запись, а не чтение.
Аноним 16/08/15 Вск 22:48:50 #8 №531269 
14397545308220.png
>>531265
Аноним 16/08/15 Вск 22:54:20 #9 №531270 
>>531262
constexpr и constexpr-методы для сложных инициализаций констант.
Аноним 16/08/15 Вск 22:57:55 #10 №531272 
>>531269
Спасибо. То есть получается, объект создаётся в конце хедера? Как я понял, в каждом файле будет свой статический объект, верно?
Аноним 16/08/15 Вск 23:08:01 #11 №531275 
>>531265
cout это обычная глобальная переменная класса ostream, которая инициализируется до первого обращения к ней. Берешь и создаешь свою такую же, сможешь обратиться к ней отовсюду, где она будет видна.

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

[code lang="cpp"]
class TvoyaMamka
{
static std::unique_ptr <TvoyaMamka> instance_;
static std::once_flag flag_;

//Основное содержимое класса
//Приватные конструкторы

public:

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

//...

//Получаем ссылку на объект-мамку.
//При первом вызове она будет создана, дальнейшие будут возвращать ссылку на уже созданную
TvoyaMamka & mamka = TvoyaMamka::getInstance ();
[/code]
Аноним 16/08/15 Вск 23:10:30 #12 №531277 
Почему constexpr переменная должна быть static, если она член класса?
Аноним 16/08/15 Вск 23:11:41 #13 №531279 
>>531275
> Если ты хочешь не получать объект, а использовать только статические методы через A::f (), то тебе и не нужно создавать объект, просто делаешь все методы статическими.
Вообще, да, именно статические методы и хотел получить. Просто я почему-то подумал, что вообще без объектов к ним не получится обратиться.
Аноним 16/08/15 Вск 23:15:55 #14 №531280 
>>531269
Это какая-то дичь, лол. В каждой единице трансляции с таким хэдером будет создана новая копия init с вызовом конструктора. И единственным на всю программу x и y будет многократно присвоены одни и те же значения. Я не говорю уже о том, что если в одном из таких файлов кто-то после определния init попытается записать в x или y в глобальном контексте например, в конструкторе еще одного статического члена, то последствия будут ужасны.
Аноним 16/08/15 Вск 23:26:43 #15 №531285 
>>531277
Если не статик то для нее нужен инстанс, а для статической инстанс не нужен.
Аноним 16/08/15 Вск 23:29:44 #16 №531286 
>>531285
Инстанс в смысле экземпляр класса?
Аноним 16/08/15 Вск 23:31:47 #17 №531287 
>>531286
Да.
Аноним 16/08/15 Вск 23:32:43 #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", а для нестатического члена-переменной это может произойти только когда объект будет создаваться.
Аноним 16/08/15 Вск 23:46:33 #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? Проще говоря, все переменные блока пихаются в стек в начале блока, или по мере определения?
Аноним 16/08/15 Вск 23:49:42 #20 №531294 
>>531293
Тут не надо быть гуру, чтобы ответить.
[code lang=cpp]
{
int x = y; //Ошибка, потому что y еще не определена (ее нет в стеке)
int y = 1;
}
[/code]
Аноним 16/08/15 Вск 23:56:59 #21 №531298 
>>531294
Тогда как решать подобные проблемы:
[code lang="cpp"]
{
int x = 1;
//Код, который может бросить исключение
//int y = 2;
}
//Здесь при проходе исключения нужно очищать стек, в котором хуй знает сколько членов, если для них не выделяется место при входе в блок сразу для всех
[/code]
Аноним 16/08/15 Вск 23:57:21 #22 №531299 
>>531298
y без комментария, конечно же.
Аноним 17/08/15 Пнд 00:03:03 #23 №531300 
>>531298
Хуй знает, что ты пытаешься сделать, но возможно тебе поможет: static_assert, assert, try catch.
Аноним 17/08/15 Пнд 00:10:43 #24 №531307 
>>531300
Да дело не в проблемах, лол, я просто хочу понять, во что это все компилируется.

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

0001e c7 45 f8 01 00
00 00 mov DWORD PTR _x$[ebp], 1
[/code]
Аноним 17/08/15 Пнд 04:20:27 #25 №531346 
Обязательно ли знать дискретную математику и понимать алгоритмы программисту си плюс плюс?
Аноним 17/08/15 Пнд 08:43:03 #26 №531375 
>>531346
Нет. Будешь собирать окна.
Аноним 17/08/15 Пнд 08:43:24 #27 №531376 
>>531346
Нет.
Аноним 17/08/15 Пнд 08:44:57 #28 №531379 
https://www.youtube.com/watch?v=h3PY7VSFuUU
Аноним 17/08/15 Пнд 09:38:19 #29 №531406 
>>531298
Стек сам очистится. Если тебе принципиально вызов деструкторов у всех объектов, то в начале скопа обьяви все. Потом уже твой код с исключением
Аноним 17/08/15 Пнд 10:01:04 #30 №531415 
Плюсаны, где можно своровать "Qt 5.3. Профессиональное программирование на C++"
Аноним 17/08/15 Пнд 10:07:50 #31 №531421 
>>531346
Нет. Но переписывать потом сам будешь.
Аноним 17/08/15 Пнд 10:49:32 #32 №531430 
Если я напишу

char foo[128];

локальной переменной или в качестве члена класса, эти 128 байт будут выделены в стеке?
Аноним 17/08/15 Пнд 10:50:17 #33 №531431 
>>531430
А если это static член класса?
Аноним 17/08/15 Пнд 12:16:14 #34 №531447 
>>531430
хуй знает, вась. Тебе поможет только отладочный листинг компилятора.
Аноним 17/08/15 Пнд 12:17:01 #35 №531448 
>>531430
Да.
>>531431
Нет.
Аноним 17/08/15 Пнд 12:19:23 #36 №531449 
>>531447
Блядь, ну что за долбоебы на моей доске? Для локальных переменных гарантируется, что они будут выделены в автоматической памяти стеке, для статических - что в статической памяти сегменте данных, для динамически выделенных - в динамической памяти куче. Это регламентировано, листинги смотреть для этого не надо, маня.
Аноним 17/08/15 Пнд 12:21:25 #37 №531450 
>>531448
А где тогда, если статик?
Аноним 17/08/15 Пнд 12:25:12 #38 №531451 
>>531450
>>531449
Аноним 17/08/15 Пнд 12:28:50 #39 №531453 
А если вот так объявлен массив, то есть длина определяется во время исполнения, то тоже в стеке выделяется память?

И кстати, это официальный C++ или какие-то аддоны компилятора так разрешают делать?
Аноним 17/08/15 Пнд 12:29:09 #40 №531454 
>>531453
http://pastebin.com/PikVAqgt
Аноним 17/08/15 Пнд 12:34:36 #41 №531456 
>>531449
Вась, расскажи плиз, где выделяются классы?
Аноним 17/08/15 Пнд 12:35:39 #42 №531457 
>>531456
Там же, где и не классы. То, где выделяется, не зависит от того, класс это или примитивный тип.
Аноним 17/08/15 Пнд 12:47:37 #43 №531459 
>>531456
Классы, уеба, нигде не выделятся.
Аноним 17/08/15 Пнд 13:50:07 #44 №531487 
Анан, как фастом (ну или просто хотя бы грамотно) поднять Qt и boost? Два года прогаю на MFC и это ж пиздец и не перспективно, короче думаю зря время трачу
По Qt-у думаю это наверну >>531415, норм для старта?
Аноним 17/08/15 Пнд 13:54:41 #45 №531488 
>>531487
С сайта кьюта скачай кьют криэйтор. И буст с сайта буста. Если тебе из буста нужны только хедер-онли библиотеки, то просто путь для инклюдов добавь. Если нет, то ебись.
Аноним 17/08/15 Пнд 13:54:42 #46 №531490 
>>531487
Офф доки (одни из лучших в опенсоурсе) + примеры. Ну и вопросы, ответы на которые ты не нашел в доках, задавай здесь.
Аноним 17/08/15 Пнд 14:25:03 #47 №531502 
>>531459
Сами классы как абстракция нигде не выделятся, да. Но их методы, как и другие объекты второго класса, будут в сегменте кода.
Аноним 17/08/15 Пнд 14:27:32 #48 №531503 
>>5315027
Методы в сегменте кода, а другие члены при объявлении объекта выделяются и с каждым объектом новые, а методы только однажды?
Аноним 17/08/15 Пнд 14:30:30 #49 №531504 
>>531453
Он внутри блока объявлен, поэтому на стеке.
Длина в твоем случае не определяется во время исполнения, constexpr вообще не появляется в рантайме, а const появляется, но еще во время компиляции из нее будет выдрано значение в отдельную таблицу констант, которое станет статическим размером. Поэтому, например:

[code lang="cpp"]
const size_t length2 = 128;
const cast <size_t &> (length2) = 1;
int bar [length2]; //Создается массив длины 128
[/code]
Аноним 17/08/15 Пнд 14:32:15 #50 №531505 
>>531503
Да. Методы и статические члены-данные однажды, только данные будут в сегменте данных, а методы в сегменте кода.
Аноним 17/08/15 Пнд 14:32:19 #51 №531506 
>>531504
>а const появляется, но еще во время компиляции из нее будет выдрано значение в отдельную таблицу констант, которое станет статическим размером.

Я для того кроме констэкспра и сделал просто конст, чтобы спросить, мол что если там значение, которое во время компиляции неизвестно. Компилятор умный конечно смекнет, что оно таки известно, но по C++ стандарту такое либо разрешено, либо нет. И если да, то значит оно как-то на стеке выделяется и для значений, которые во время компиляции не узнать.
Аноним 17/08/15 Пнд 14:36:43 #52 №531507 
>>531505
Константы тоже однажды или в каждом объекте свои? Сегмент данных это же статическая память? Если в классе использовать new/delete, то те члены класса будут в динамической? А если объекты с помощью new/delete создавать, то методы тоже в динамической? Чтобы ты всё тут не расписывал посоветуй статью на эту тему.
мимопроходил
Аноним 17/08/15 Пнд 14:40:57 #53 №531509 
>>531506
Если там значение, которое компилятору неизвестно, то определение массива не скомпилируется. Стандартом определено понятие "константное выражение", которое может быть вычислено на этапе компиляции. Когда компилятор видит определение константы, он смотрит на ее инициализатор. Если там константное выражение, он запоминает его в таблицу констант и в дальнейшем имя этой константы тоже будет константным выражением. Если это константный параметр, который неизвестен, или инициализатор использует неконстантное выражение, то такого не произойдет. Когда ты пытаешься определить массив, в качестве размера допустимо только константное выражение, поэтому компилятор, видя внутри квадратных скобок имя константы, проверяет, является ли она константным выражением. Если да, то он уже знает ее значение, если нет - будет ошибка компиляции. Никакого определения размера в рантайме здесь быть не может. Это все, разумеется, по стандарту, но и расширения компиляторов такого не делают, ибо полностью бы поменялась концепция выделения памяти.
Аноним 17/08/15 Пнд 14:47:23 #54 №531510 
>>531507
Константность не влияет на это. Статическая константа будет одна, а нестатическая для каждого. Сегмент данных это статическая память. Если создать объект класса в динамической памяти, то его члены-данные из которых объект и состоит будут в динамической. Если просто использовать new в методах класса, то на члены это никак не повлияет, все будет зависеть от того, как был создан объект класса. Методы всегда создаются единожды, в сегменте кода, независимо от того, как создан объект, потому что метод принадлежит не объекту, а всему классу.
http://en.cppreference.com/w/cpp/language/object
http://en.cppreference.com/w/cpp/language/storage_duration
Аноним 17/08/15 Пнд 14:49:25 #55 №531511 
>>531509
Нихуя себе, и правда ведь. Никогда бы не подумал, что в C++ компилятор может разрешать компилировать штуку с одним объектом какого-то типа, но ругаться на другую штуку того же самого типа. Пиздец ебанутая хуйня. Лучше бы они вообще такие штуки запретили.
Аноним 17/08/15 Пнд 14:50:27 #56 №531513 
>>531510
Я пока не выучил английский. Есть перевод?
Аноним 17/08/15 Пнд 14:50:39 #57 №531514 
14398122398450.png
>>531511
Аноним 17/08/15 Пнд 15:00:47 #58 №531517 
>>531511
Суть тут в том, что изначально в языке не было способа указать компилятору, что сущность содержит в себе константное выражение. Поэтому использовались const, как наиболее близкие к этому, и выполнялись дополнительные проверки на "статичность" ее значения. А сейчас в языке есть constexpr, с который специально предназначен для того, чтобы декларировать "статичность". Так что используй constexpr, и тебя эта проблема не коснется. А запретить такое использование const нельзя из-за обратной совместимости, легаси-код ведь тоже должен работать как-то.
Аноним 17/08/15 Пнд 15:02:43 #59 №531518 
>>531514
Ты можешь объявить factorial со спецификатором constexpr, очевидно же. Иначе как компилятор узнает, что можно выполнить его тело на этапе компиляции?
Аноним 17/08/15 Пнд 15:03:24 #60 №531521 
>>531513
Внизу страницы выбор языков.
Аноним 17/08/15 Пнд 15:07:40 #61 №531524 
>>531521
Там через гугл переводчик. Неудобно читать.
Аноним 17/08/15 Пнд 15:09:37 #62 №531526 
>>531524
Ну звиняй, хлопец, бананьев нема. Посмотри книжки в оппосте, у которых год издания поновее.
Аноним 17/08/15 Пнд 15:13:24 #63 №531527 
>>531379
Похож на сына Вассермана.
Bubble Sorting. Аноним 17/08/15 Пнд 15:23:20 #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-ую.

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

Спасибо

Аноним 17/08/15 Пнд 15:24:51 #65 №531532 
>>531530
Я имел ввиду, почему не 9 и 8, если b-1.

уточняющий фикс
Аноним 17/08/15 Пнд 15:29:40 #66 №531533 
14398145805620.png
>>531518
Почему не робит? Ебланы, делавшие майкрософтовский компилятор, еще не сделали поддержку C++11 или C++14?
Аноним 17/08/15 Пнд 15:31:27 #67 №531535 
>>531530
У тебя в коде внешний цикл с единицы и первый элемент не будет отсортирован. Сравниваешь элемент массива с самим массивом, это вообще не скомпилируется.
Аноним 17/08/15 Пнд 15:32:39 #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?

Аноним 17/08/15 Пнд 15:33:53 #69 №531538 
>>531533
Если бы ты прочитал сообщение об ошибке, ты бы понял, что в constexpr-функциях нельзя использовать условные операторы. И исключения, кстати, тоже нельзя бросать.
Аноним 17/08/15 Пнд 15:35:17 #70 №531539 
>>531537
Еблан, ты можешь свое говно нормально отформатировать и вставить внутри [code тега? У тебя же [b съедается вакабой, хуиная голова.
Аноним 17/08/15 Пнд 15:36:25 #71 №531542 
14398149852810.png
>>531533
А не, это я еблан. Хотя вижуал студия тоже ебланская - сообщение об ошибке хуевое, подсвечивает использование функции в коде, а не то, что функция объявлена constexpr, но в ней запрещенные для constexpr конструкции.
Аноним 17/08/15 Пнд 15:36:50 #72 №531543 
>>531538
>И исключения, кстати, тоже нельзя бросать.
Вообще-то можно
Аноним 17/08/15 Пнд 15:37:37 #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;
}
}

тест
Аноним 17/08/15 Пнд 15:38:03 #74 №531545 
>>531544
заебца. так вот...
Аноним 17/08/15 Пнд 15:40:33 #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 сравнивается?

бейте, не обоссыте
Аноним 17/08/15 Пнд 15:41:12 #76 №531547 
>>531542
Потому что это шаблон, в них ошибки не обязаны диагностироваться компилятором по стандарту.
Аноним 17/08/15 Пнд 15:41:32 #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;
}
}

упс... теперь точно норм.
Аноним 17/08/15 Пнд 15:42:19 #78 №531549 
>>531547
>в них ошибки не обязаны диагностироваться компилятором по стандарту

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

Это не отменяет того, что хуевую диагностику сделали.
Аноним 17/08/15 Пнд 15:42:22 #79 №531550 
>>531543
В C++11 нельзя фактически ничего, кроме return. В C++14 наоборот, можно почти все, но пока это не все компиляторы поддерживают.
Аноним 17/08/15 Пнд 15:43:39 #80 №531551 
>>531548
Я не буду читать твое говно, пока ты не сделаешь нормальное форматирование. Залей на пастебин, блядь, никакого уважения к анонам.
Аноним 17/08/15 Пнд 15:43:43 #81 №531552 
>>531550
Вроде кланг поддерживает, и больше никто.
Аноним 17/08/15 Пнд 15:46:19 #82 №531554 
14398155795350.jpg
Интересно, если я сделаю изменяющееся constexpr выражение и понаделаю array'ев с размером, задающимся им, вижуал студия обосрется с показом в редакторе их типа?
Аноним 17/08/15 Пнд 15:47:20 #83 №531556 
>>531551
Простите, мастер Шифу.

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

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

>Почему b в этих строчках невозможно заменить на что-нибудь другое. Как и почему управляющая переменная подчиняет nums?
Аноним 17/08/15 Пнд 15:50:10 #87 №531561 
>>531554
Неа, как только ты редактируешь код, все constexpr перевычисляются. Студия покажет просто вычисленные значения.
Аноним 17/08/15 Пнд 15:53:57 #88 №531562 
>>531556
В студии отладчик показывает, что на первой итерации цикла b равно 9, как и должно быть.
>>531560
Можно заменить на что угодно без проблем.
Аноним 17/08/15 Пнд 15:54:11 #89 №531563 
14398160511020.png
>>531559
Пиздец, у нас в треде имеется c++ standard lawyer? Нахуй ты стандарт читаешь, ты что ебанутый? Страуструп, залогинься.

Аноним 17/08/15 Пнд 15:56:16 #90 №531564 
>>531563
Ну а хуле, там все просто и понятно. На самом деле нет, но в дополнение к гуглу очень даже неплохо.
Аноним 17/08/15 Пнд 15:58:41 #91 №531568 
Анон, что я сделал не так в реализации сортировки?
https://ideone.com/6WdceZ
Аноним 17/08/15 Пнд 15:58:42 #92 №531569 
14398163223990.png
>>531561
Видимо, ты не понял о чем я, а я вот об этом https://akrzemi1.wordpress.com/2013/06/20/constexpr-function-is-not-const/
Студия действительно обсирается и показывает неправильный размер std::array у второй переменной.

Аноним 17/08/15 Пнд 15:59:40 #93 №531572 
14398163800560.png
>>531569
Переделал скриншот, а то там тултип загораживает кусок кода
Аноним 17/08/15 Пнд 16:09:15 #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;
}
}

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

Почему? На ideone указатель однобайтовый что ли? Не верю.
Аноним 17/08/15 Пнд 16:45:32 #112 №531602 
>>531593
Поставил в массиве с двумя ячейками инт с= 1, сработало.

Спасибо.
Аноним 17/08/15 Пнд 16:46:23 #113 №531603 
>>531600
В assign передается указатель на начало массива и на начало плюс sizeof (int *)/sizeof (int) = 4/4 = 1.
Аноним 17/08/15 Пнд 16:48:52 #114 №531605 
>>531603
А, ну ладно. Значит ли это, что там 32-битная архитектура? Ведь на 64-битной sizeof(int*) должен быть 8, не так ли?
Аноним 17/08/15 Пнд 16:51:36 #115 №531606 
>>531605
Да, но если у тебя 64-битная ОСи пекарня, это не значит, что все будет компилироваться под нее автоматически. Это тот еще геморрой, поэтому если нет требований к производительности, обычно компилируют для 32-bit и работают в режим совместимости.
Аноним 17/08/15 Пнд 16:52:38 #116 №531607 
>>531602
Товарищи, вот вы скажите, если я так застрял на пузырьке, это значит, что суждено мне томиться в темнице гуманитарных наук веки вечные?
Аноним 17/08/15 Пнд 16:53:19 #117 №531608 
>>531606
Да ладно, не верю. По крайней мере про g++ и clang++ не верю.
Аноним 17/08/15 Пнд 16:54:26 #118 №531609 
14398196667720.jpg
>>531607
Рандомпик привлекающий внимание отклеился.
Аноним 17/08/15 Пнд 16:56:13 #119 №531610 
>>531607
Не знаю, я писал пузырек только на паскале, а на кресты вкатился, когда уже выроз из пузырьков.
Аноним 17/08/15 Пнд 16:58:00 #120 №531611 
>>531607
Судя по всему, ты решил по какой-то неизвестной причине выучить первым языком программирования C++. Это конечно пушка и совсем хуевое решение, но если уж ты решил и какое-то время на это потратил, то ладно.

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

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

фикс
Аноним 17/08/15 Пнд 17:02:25 #123 №531615 
>>531583
Это просто божественно, упоротый засранец сделал меня охуеть. Есть еще подобное?
Аноним 17/08/15 Пнд 17:04:33 #124 №531616 
>>531615
Более странного и ебанутого, чем это, я не знаю. А так если подписаться на hackernews и reddit.com/r/cpp, то время от времени прикольные штуки попадаются.
Аноним 17/08/15 Пнд 17:06:14 #125 №531618 
>>531611
Я загуглил. Смайлодрочеры всяко разных говнофорумов яро советовали С. Долго думать не стал.
Аноним 17/08/15 Пнд 17:08:17 #126 №531619 
>>531618
А, ну если C, то это лучше. А то это вроде C++ тред, я о просто C и не подумал.
Аноним 17/08/15 Пнд 17:51:18 #127 №531634 
Какой в C++ максимальный диапазон индексов массива?
#define SIZE 40000
int seq[SIZE]
работает нормально, а программа с
#define SIZE 65000
int seq[SIZE]
крашится при запуске.
Аноним 17/08/15 Пнд 17:58:17 #128 №531636 
>>531634
Крашится потому что стека не хватает. Максимальный диапазон зависит от компилятора, каким типом он считает числовые литералы.
sageАноним 17/08/15 Пнд 18:01:41 #129 №531638 
>>531636
> Максимальный диапазон зависит от компилятора, каким типом он считает числовые литералы
Имелось ввиду при такой реализации как у тебя (через дефайн).
Аноним 17/08/15 Пнд 18:03:34 #130 №531640 
>>531634
Нет лимита. Индекс должен влезать в size_t, который обычно 2^32 = 4294967296, но если он не влезет, ты получишь ошибку компиляции. С точки зрения лимита памяти, стандарт это не регламентирует, ты можешь запустить на машине с 640 килобайт памяти которых должно хватить каждому, лол и покрашиться уже на паре десятков тысяч. Стандартом регламентировано, что в этом случае должно бросаться исключение out of memory, емнип.
Аноним 17/08/15 Пнд 18:31:08 #131 №531648 
Как вообще экземпляр класса выглядит в памяти? И где он выделяется?
Известно ли значение членов-переменных класса во время компиляции?
Известно ли значение х во время компиляции, при х = sqrt(2) ?
Аноним 17/08/15 Пнд 18:42:51 #132 №531654 
>>531648
Как последовательно идущие: объекты его базовых классов есть нюансы, гугли empty base optimization, указатель на его vtable если есть хотя бы один виртуальный метод, его нестатические члены-данные, с возможными промежутками из-за выравнивания. Порядок может различаться, стандарт вроде бы это не оговаривает. Гарантируется, что данные-члены будут идти в порядке их объявления, возможно, есть еще какие-то гарантии для объектов базовых классов, хуй знает.
Аноним 17/08/15 Пнд 18:45:32 #133 №531656 
>>531648
Значение переменных неизвестно, это же переменные, блядь, они устанавливаются конструктором.
sqrt не является частью языка, так что зависит от того, откуда ты ее взял. Если она объявлена constexpr, то будет известно, иначе нет.
Аноним 17/08/15 Пнд 19:06:37 #134 №531662 
>>531656
> Значение переменных неизвестно, это же переменные, блядь, они устанавливаются конструктором.
Но они ведь инициализованы.
> sqrt не является частью языка, так что зависит от того, откуда ты ее взял. Если она объявлена constexpr, то будет известно, иначе нет.
То есть constexpr int x = f(y); не будет компилироваться, если f() не объявлена как constexpr функция?
Аноним 17/08/15 Пнд 19:17:12 #135 №531665 
>>531662
>Но они ведь инициализованы.
Без разницы, инициализация членов класса всегда рассматривается не как потенциально константное выражение, а как нечто, что нужно тупо передать конструктору. Все, что ты пишешь после =, будет неявно скопировано в список инициализации конструктора A::A () : x { 1 } { ... }.
>То есть constexpr int x = f(y); не будет компилироваться
Именно так.
Аноним 17/08/15 Пнд 19:54:45 #136 №531679 
>>531542
Тащемта факториал от нуля обычно доопределён равным 1. Логики в этом нет, но намного упрощает жизнь математика.
Аноним 17/08/15 Пнд 20:01:05 #137 №531681 
>>531679
Логика есть, n! = Г(n+1) же.
Аноним 17/08/15 Пнд 20:05:51 #138 №531682 
Анон, возвращаю из функции-шаблона указатель на объект и из-за этого ловлю сегфолт. До возвращения проверил - указатель указывает на то что нужно. Что за хуйня? Спасибо.
Аноним 17/08/15 Пнд 20:12:34 #139 №531684 
>>531681
Ты не можешь поймать сегфолт без разыменования. Вообще, код покажи.
Аноним 17/08/15 Пнд 20:12:52 #140 №531685 
>>531684
>>531682
Аноним 17/08/15 Пнд 20:17:39 #141 №531686 
>>531684
Да нет возможности его показать.
>Ты не можешь поймать сегфолт без разыменования.
Я врать что ли буду, лол? До оператора return работает отладочная печать. После вызова этой функции печать не работает. Сигфолт именно в ретерне, но с чего бы это ему?
Аноним 17/08/15 Пнд 20:21:52 #142 №531687 
>>531607
Если ты не способен написать даже пузырёк, то ты безнадежен
Аноним 17/08/15 Пнд 20:24:32 #143 №531689 
>>531682
Где объект лежит? Небось на стеке.
Аноним 17/08/15 Пнд 20:27:02 #144 №531691 
>>531689
А вот и неть. Под объект память еще давно выделялась динамическая. А эта функция поиска возвращает указатель на него и в этот момент сегфолтится.
Аноним 17/08/15 Пнд 20:42:55 #145 №531700 
Не могу посмотреть код, но функция объявлена как-то так
template<typename karasique>
typename sclad<payload>::yoba* sclad<karasique>::get(karasique& a) {
...Ищем йобу ранее добавленную йобу, возвращаем укащатель на нашу йобу
return yoba_ptr;
}
Ну чому там происходит сегфолт?
Аноним 17/08/15 Пнд 20:53:08 #146 №531702 
>>531686
Указатель это примитивный тип, никакие действия с ним, кроме разыменования некорректного, не могут покрашить программу. Если ты не разыменовываешь его например, возвращая ссылку вместо указателя, то крашится не из-за этого. Например, у тебя может быть исключение в деструкторе какого-то из локальных объектов, или еще что-то подобное.
Аноним 17/08/15 Пнд 20:58:43 #147 №531704 
>>531700
Как йобы хранятся в карасике?
Аноним 17/08/15 Пнд 21:06:32 #148 №531706 
Добрался до пеки наконец, все так как сказал >>531702
ошибка была в деструкторе одного из локальных объекетов функции. Спасибо большое.
Аноним 17/08/15 Пнд 22:02:59 #149 №531730 
Как перегрузить оператор [][], если нельзя принимать два аргумента? Мне нужно именно перегрузить оператор, а не создавать одномерный массив[row*column+width] вместо этого.
Аноним 17/08/15 Пнд 22:09:34 #150 №531731 
>>531730
Оператора [][] нет. Перегружаешь [], который вернет объект класса, для которого перегружен [], который вернет значение. Будешь писать tvoya_mamka [15] [1];
Аноним 17/08/15 Пнд 22:19:40 #151 №531733 
>>531731
>tvoya_mamka [15] [1]
Передаются два аргумента же. Или я что-то не понял?
Аноним 17/08/15 Пнд 22:44:40 #152 №531751 
>>531733
Непонял. tvoya_mamka [15] [1] обрабатывается как (tvoya_mamka [15])[1] кроме там случая нормального двумерного массива (который не массив указателей на массив).
Аноним 17/08/15 Пнд 22:51:59 #153 №531754 
Решил выучить C++. Но вот подумалось, ну прочитаю я пару книг, разберусь в синтаксисе, что куда писать и как из этого сделать программу. А дальше что? Чтоб развиваться же надо кодить, а что кодить? Где вы берете идеи?
Аноним 17/08/15 Пнд 22:54:20 #154 №531755 
>>531751
Случай двухмерного массива это не массив указателей на массив, а несколько одномерных массивов подряд. int a [5][10]; a [1] - второй по порядку массив из десяти интов. a [1] [2] эквивалентно (a [1]) [2], т.е. третий элемент этого "подмассива".
Аноним 18/08/15 Втр 00:36:21 #155 №531813 
Где выделяется память для `MyClass a(x);` ?
Аноним 18/08/15 Втр 01:07:35 #156 №531831 
>>531456
>>531648
>>531813
Берешь и изучаешь про storage duration по ссылкам выше, сука. Заебал уже одно и то же спрашивать.

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

Qt::что-то там
Аноним 18/08/15 Втр 10:07:08 #166 №531939 
>>531841
socket.h
Аноним 18/08/15 Втр 13:12:41 #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]
Аноним 18/08/15 Втр 14:42:11 #168 №532022 
>>531995
Очевидно, что ты проебался с разметкой и указателями.
Аноним 18/08/15 Втр 14:45:24 #169 №532024 
>>531841
Есть нормальные высокоуровневые библиотеки для клиент-серверной работы. Casablanca, например, или libcurl старое проверенное говно мамонта. Только средствами языка ты заебешься делать что-то, кроме своего пинг-понга.
Аноним 18/08/15 Втр 14:52:20 #170 №532028 
>>532022
Ок, вот запускаемая версия с нормальной разметкой
http://code.runnable.com/VdMajRA5sdkMVhvt/dungeon_generator-for-c%2B%2B
Аноним 18/08/15 Втр 15:01:50 #171 №532030 
>>531841
> не понимаю как это работает.
Для начала нужно почитать о модели OSI, об целях третьего и четвёртого подуровня и об устройстве протоколов IP, TCP и UDP. А после этого не заморачиваться и использовать библиотечные обёртки системных функций.
Аноним 18/08/15 Втр 15:07:39 #172 №532031 
>>532028
Как-то плохо тупо писать в Dungeon.hpp в конструкторе только типы аргументов, без названий - ведь хедер это как бы интерфейс, и должно быть понятно, что оно делает.

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

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


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

char dungeon = new char*[D_HEIGHT];

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

Кстати, почему std::array или std::vector не хочешь использовать?
Аноним 18/08/15 Втр 15:13:45 #173 №532034 
>>532031
Ну и создай новый main.cpp и посмотри просто, будет ли у тебя вылетать оно, если создать экземпляр твоего класса, разименовать каждый указатель в этом dungeon, и выйти. Без работы с файлом. И посмотри, когда вылетает - в констркуторе, в деструкторе или при разименовании.
Аноним 18/08/15 Втр 15:15:45 #174 №532036 
>>532031
>А еще если ты берешь в качестве аргументов int копию, то нет никакого смысла делать const - const нужен если по ссылке, а так эти инты в любом случае копируются.
Я просто тестил кое-что и теперь лень убирать.

> еще спасибо, что спалил мне такой классный сайт. Буду им пользоваться теперь.
Не за что.
Аноним 18/08/15 Втр 15:32:08 #175 №532039 
>>532036
Какой же ты мудак, блядь. Я минут десять втыкал в твой код, пока не понял, что ты в конструкторе выделяешь в локальную переменную dungeon вместо члена класса. Ой дурак, пиздос.
Аноним 18/08/15 Втр 15:34:16 #176 №532041 
>>532039
БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯДЬ.
ПИЗДЕЕЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦЦ
Аноним 18/08/15 Втр 15:35:53 #177 №532042 
>>532039
спасибо тебе, добрый анон.
Аноним 18/08/15 Втр 15:36:40 #178 №532043 
>>532039
Вот чтобы не было такой хуйни, делай всегда имена приватных членов с суффиксом_.
Аноним 18/08/15 Втр 15:41:09 #179 №532047 
>>532030
Где об этом почитать? Гуглятся огромные книги таненбаума и олевера. На вики не понял.

>>531939
Спасибо. Гуглится. Почитаю.
Аноним 18/08/15 Втр 16:16:44 #180 №532058 
>>532047
В одном из предыдущих тредов обсуждалась замена Таненбауму, книжка по лекциям Машечкина. Ссылка тоже была там. Но вообще я бы на твоем месте попробовал Таненбаума, читается легко и интересно.
Аноним 18/08/15 Втр 16:23:47 #181 №532061 
>>532058
>Машечкина
Нашёл. Там вроде по ОС. А таненбум слишком большой.
Аноним 18/08/15 Втр 16:31:23 #182 №532062 
>>532061
Там про сети две главы.
Аноним 18/08/15 Втр 16:34:07 #183 №532063 
>>532062
Тогда спасибо. Скачаю почитаю.
Аноним 18/08/15 Втр 17:57:22 #184 №532099 
14399098420300.png
VS Community 2013
>free
>free!

>License: 30 day trial
>This license has expired

На SO советуют запускать с RunAsDate лол. Или регать мс акк, давать студии доступ к инету, логиниться, ставить себе анальные зонды. Ну охуеть теперь.
free, блять.
Аноним 18/08/15 Втр 18:23:58 #185 №532107 
>>532099
> использует продукцию Microsoft
> возмущается анальным зондам
Аноним 18/08/15 Втр 18:27:03 #186 №532110 
>>532099
В чем проблема-то, лол? Я вот с dreamspark поставил enterprice edition, брат жив, зависимость лютая.
Аноним 18/08/15 Втр 19:28:22 #187 №532135 
>>532110
Да, в EE с 2008 студий никаких проблем никогда не было. А тут купился на ништяки типа плагинов, поставил Community, и на тебе. Буду знать теперь.

>>532107
Без проблем пользуюсь всякой продукцией, не требующей онлайна. Пусть попытаются что-то передать - файрволлы рулят.
Аноним 18/08/15 Втр 19:50:25 #188 №532149 
>>532135
> файрволлы рулят
Какой фаервол? Твой трафик анализируется на другой машине с открытым ПО?
Аноним 18/08/15 Втр 20:04:27 #189 №532161 
>>532149
Любой, который ставит хук на сетевые функции и хер что сделаешь, будучи серьезным приложением.
Например, Outpost. Или ты намекаешь, что и в нем могут быть анальные зонды, спонсируемые майкрософтом? Несереьзно, за столько лет уже спалились бы. Прокси + вайршарк, или что там сейчас юзают. Спалились бы == вой жуткий поднялся бы == потеря тысяч клиентов == банкротство. Нереально. Ну и как бы не Outpost-ом единым, есть и другие варианты.
Аноним 18/08/15 Втр 20:44:27 #190 №532183 
>>532161
А когда оказалось, что десятка шлет запись с вебкамеры, поднялся вой, ммм? Всем похуй, пора бы привыкнуть.
Аноним 18/08/15 Втр 20:47:00 #191 №532185 
14399200200440.jpg
>>532183
>поднялся вой, ммм?
А при чём тут ммм?
Аноним 18/08/15 Втр 20:50:05 #192 №532187 
>>532185
Даже объяснять лень.
Аноним 18/08/15 Втр 21:01:54 #193 №532196 
>>532161
> сетевые функции
Сетевые функции контролируются системой производства майскрософт. Если твой фаервол живет в среде операционной системы виндоуз то абсолятно вся информация которую он получает выдается ему системой (тоесть находится под контролем майкрософта). И если майкросфт захочет передать какую-то информацию фаервол (живущий в системе) никак помешать не сможет в принципе, он даже его не заметит. Шанс защищиться есть только снаружи, тоесть пытатся контролировать и анализировать исходящий трафик с помощью другой промежуточной машины, желательно с открытым ПО (как вариант виртуализация).
Аноним 18/08/15 Втр 21:15:39 #194 №532207 
>>532185
Ты не замечаешь внешнего сходства Мавроди и Била? Да они же двоюродные братья.
Аноним 18/08/15 Втр 22:21:54 #195 №532252 
>>532183
Ну как бы да. Все адекватные айтишники послали десятку нахуй и решили, что после конца семерки переберуться на линукс.

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

и почти не шучу же. В какие-то большие продукты точно помню кто-то такое засовывал
Аноним 19/08/15 Срд 03:14:45 #201 №532327 
>>532273
>Куча реверс инженеров проверяют ассемблерный код
Средствами той же винды, лолблять.
Аноним 19/08/15 Срд 03:50:26 #202 №532339 
14399454263850.jpg
>>532196
Хардварные файерволлы наше все.
Аноним 19/08/15 Срд 07:40:59 #203 №532355 
ОП съебал в крым, джва дня не будет на связи.
Аноним 19/08/15 Срд 08:11:31 #204 №532365 
>>532327
XXXDDDD))
IDA разбирает бинарник вне зависимости от оси на которой установлена. Ос ей нужна только для дебага по удалёнке
Аноним 19/08/15 Срд 11:48:50 #205 №532409 
14399741304650.png
Поясните, я читаю Страуструпа и делаю задания, но на большинство контрольных вопросов и терминов я ответить не могу. Что я не так делаю?
sageАноним 19/08/15 Срд 12:13:53 #206 №532424 
>>532409
>Чему равен индекс 3 элемента вектора
Почему просто взять и не спросить про начальный индекс любого массива? Нужно какую-то хуитень инопланетную спрашиать. Все через жопу и язык такой же черезжопный.
Аноним 19/08/15 Срд 12:29:53 #207 №532433 
>>532424
> Почему просто взять и не спросить про начальный индекс любого массива?
Это более очевидно, ньюфаг может и вспомнить. А так может запутатся, обосрется с ответом - появится шанс что запомнит.
Аноним 19/08/15 Срд 12:30:56 #208 №532434 
>>532409
Ну например там есть ебланские вопросы "что такое вычисления?". А вообще я не знаю, что ты делаешь не так. Может ты пытаешься как на экзамене ответить, не гугля? Используй всю доступную информацию.
Аноним 19/08/15 Срд 12:38:11 #209 №532439 
>>532434
Ну, я гуглю, но некоторые вопросы или термины даже гугол не знает и их в книге не нашёл. Например:
<<
#include
библиотека
вывод
компилятор
вычисления
и т.д.
Может я что и знаю, но что на эти термины писать - я не понимаю. Я себе отдельый файл завёл в ворде для них.
Аноним 19/08/15 Срд 12:47:22 #210 №532445 
>>532439
Лол. Если ты книгу читал, то тебе должны были про это что-то говорить, нет?

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

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

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

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

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

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

И кстати это все еще ты, тот, кому на рандомном форуме посоветовали C первым языком?
Аноним 19/08/15 Срд 12:49:23 #211 №532446 
>>532445
>И кстати это все еще ты, тот, кому на рандомном форуме посоветовали C первым языком?
Нет, но я тут частенько спрашивал и приводил код.
Помню, мне кто-то с локалом, стд и консолью помог в треде.
Аноним 19/08/15 Срд 12:50:03 #212 №532447 
>>532439
Страуструп для новчиков хуево пишет. Попробуй другую книгу. А когда наберешься опыта и знаний, можешь начать читать Страуструпа "for mastery".
Аноним 19/08/15 Срд 13:06:08 #213 №532451 
>>532439
На вопросы страуструпа отвечать не надо. Там достаточно что ты сам понимаешь что такое вычисление и компилятор. И когда он попросит Переписать калькулятор только чтобы перегрузить оператор тебе этого делать не обязательно т.к. до этого он ещё раз 5 даст такое же задание только другими словами опишет и размер исходного кода решения будет меньше.
Аноним 19/08/15 Срд 13:46:21 #214 №532468 
>>532451
Вообще, стоит ли делать задания, которые я в уме решил?
Просто, тут есть задание, которое делать и придумывать долго, но я его, как бы, в уме решил на ++.
Аноним 19/08/15 Срд 13:50:21 #215 №532472 
>>532409
>Что я не так делаю?
Читаешь Страуструпа.
Аноним 19/08/15 Срд 13:54:05 #216 №532476 
>>532468
Нет. Но он задают много заданий на одну тему. Реши только одно в программе иди дальше.
Аноним 19/08/15 Срд 21:06:59 #217 №532686 
На чем удобнее писать гуй под Шиндовс в VS2015 не вникая во всякие Qt и желательно с няшным графическим редактором? Уже давно перекатился с шарпа на кресты, но под десктоп все равно леплю на шарпаче и это уже заебало. Хетелось бы выкинуть его на помойку и забыть. Присматриваюсь к C++/CLI, но это же говно, да? Мб wxWidgets или что получше есть?
Аноним 19/08/15 Срд 21:30:28 #218 №532696 
>>532468
>Просто, тут есть задание, которое делать и придумывать долго, но я его, как бы, в уме решил на ++.

Total manyamiroque.

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

Я сначала хотел отсеивать по ифам и вопросам, типа меньше 50, чётное / нечётное, но понял что за 7 вопросов я это не сделаю и будет ОЧЕНЬ громоздким код, потом гугланул формулу Хартли и думал как сделать её цикличной. В итоге сделал, на ваш суд.
Аноним 19/08/15 Срд 22:36:28 #220 №532749 
>>532686
Чем тебе QT не подходит?
Аноним 19/08/15 Срд 22:40:54 #221 №532752 
>>532741
Я бы вместо "if/else-if/else-if/else" сделал лесенку с отступами вправо. Кол-во веток в лесенке чётное, пустые ветки содержат ";" и больше ничего.
Аноним 19/08/15 Срд 22:41:30 #222 №532753 
>>532752
Не понял, что за лесенка? Свич?
Аноним 19/08/15 Срд 22:49:08 #223 №532759 
>>532741
Условия check == 'y' и check == 'n' ничем не отличаются.
Аноним 19/08/15 Срд 23:00:36 #224 №532763 
14400144361930.png
>>532753
Ну вот вроде такой вроде...
Был бы свитч по любым условиям — тоже было бы неплохо.
Аноним 19/08/15 Срд 23:40:08 #225 №532773 
>>532759
Почему ничем? Если ввёл 'y' или 'n' или '=', то работает while.
Аноним 19/08/15 Срд 23:44:14 #226 №532774 
>>532773
[code lang=cpp]
if (check == 'y')
{
max_value = div;
div = (max_value + min_value) / 2;
std::cout << "Does the number less than " << div << "? " << std::endl;
std::cin >> check;
}
else if (check == 'n')
{
min_value = div;
div = (max_value + min_value) / 2;
std::cout << "Does the number less than " << div << "? " << std::endl;
std::cin >> check;
}
[/code]
Отличаются только 1 строчкой.
Аноним 19/08/15 Срд 23:46:30 #227 №532776 
>>532774
>\t\t\t
У меня 1 такое или тег код не работает?
Аноним 19/08/15 Срд 23:49:46 #228 №532778 
>>532776
да.
Аноним 19/08/15 Срд 23:50:44 #229 №532780 
>>532778
Да - не работает?
Или да - у меня 1?
Аноним 19/08/15 Срд 23:54:08 #230 №532782 
>>532780
да.
Аноним 20/08/15 Чтв 00:19:41 #231 №532789 
>>532741
Бля пиздец. Как же у меня с вас бомбит. Нахуя вы спамите своим говном в С++ треде. Блять, тред посвящен языку, и вопросом о языке. Создайте тред с алгоритмическими задачамитем более у тебя не задача а хуйня какая-то на 5 минут и решайте их там. Нет, ну серьезно, зачем просто постить здесь все подряд если у треда есть четкое направление?
Аноним 20/08/15 Чтв 00:22:11 #232 №532790 
>>532789
>у треда есть четкое направление
какое?
Аноним 20/08/15 Чтв 00:25:54 #233 №532795 
>>532790
>C++ тред
Действительно, какое же? Ну, как мне кажется, уместнее всего было бы задавать вопросы если не понимаешь какие-то механизмы абстракци языка, нюансы работы с памятью у этого языка, его библиотеки, и подобное.
Аноним 20/08/15 Чтв 00:33:25 #234 №532799 
>>532795
Парень пытается выучить язык путем решения этих задачек.
Аноним 20/08/15 Чтв 00:37:21 #235 №532802 
>>532799
Они оюсуждают алгоритм. Языком там что-то не пахнет.
Аноним 20/08/15 Чтв 05:10:54 #236 №532829 
>>532749
Бородатая библиотека уровня WPF и ебля с VS2015.
Аноним 20/08/15 Чтв 06:29:16 #237 №532833 
>>532789
Пошел нахуй.
Аноним 20/08/15 Чтв 06:30:51 #238 №532835 
>>532741
Ну заебись, только название переменной max_value не отражает свою сущность, ведь оно там изначально 101, а 101 не может быть.
Аноним 20/08/15 Чтв 08:43:19 #239 №532847 
>>532833
Типичная реакция зекачера на критику и пояснения. С таким подходом ты никогда не выучишь этот язык, тем более никогда не поучаствуешь ни в каком проекте, прибывая в забвении что если твоя лапша из циклов и условных операторов проходит пару тестиков придуманных тобой же, то значит что-то получается. Посылай нахуй когда тебе говорят вполне дельные и обоснованные вещи, еще пару месяцев попишешь хеловорлды и бросишь. Хотя если не бросишь это тебе же выйдет дороже, лол.
Аноним 20/08/15 Чтв 08:56:41 #240 №532850 
>>532847
Я вообще не он, и я все давно уже выучил. А ты иди нахуй со своим "этот тред про язык C++, а не про программы, написанные на нем"
Аноним 20/08/15 Чтв 09:00:17 #241 №532853 
>>532847
Ебать сколько проекций в одном посте.
Мань, все у тебя будет. Но потом.
Аноним 20/08/15 Чтв 09:04:39 #242 №532854 
>>532833
>>532850
>>532853
Поглядите, сёмочке настолько неприятно, что аж попытался соврать как он все выучил и уличить меня в проекциях. Ой лол, смешно выглядит просто, не позорься.
Аноним 20/08/15 Чтв 09:41:57 #243 №532862 
>>532789
Ящитаю, вопросам непосредственно про язык должно уделяться большее внимание, чем алгоритмическим, но за неимением оных почему бы не подискутировать про алгоритмы на крестах? Кресты - язык многогранный, несколько тредов назад вон обсуждались ассемблерные детали, чтобы объяснить анону, как все работает под капотом. Это энивей интереснее, чем в десятый раз разжевывать долбоебам, где в памяти будет объект. Алсо, про алгоритмы на крестах есть неплохая книжка Седжвика, надо будет ее в шапку добавить.
>>532854
>>532850
И не надо ссориться, ребят. Даже самые опытные здесь все еще чему-то учатся. Треды для того и созданы.
Аноним 20/08/15 Чтв 12:30:19 #244 №532917 
Привет Антон, я чутка оффтопну, но может повезет. Если кто тут серъезно работал(Ну или не серъезно, но сможет подкинуть материала) с аудио, может подскажете годного чтива по THD(Total Harmonic Distortion)?
Аноним 20/08/15 Чтв 13:50:30 #245 №532944 
14400678306090.png
Подскажите, я тут пробую задание сделать, чтобы при вводе цифр или строковых цифр простенький калькулятор их считал.
Т.е. если бы я ввёл six / seven, то это было бы = 6 / 7.
В общем, я это реализовал, но как сделать так, чтобы если я ввёл сами 6 или 7 они бы определялись?

Хотя, я может задачу неправильно понял:
>Модифицируйте мини-калькулятор, описанный в упр. 5, так, чтобы он принимал на вход цифры, записанные в числовом или строковом формате.
Вот мини-калькулятор из упр. 5: https://bpaste.net/show/99f47bccd0f1 (сам сделал, довольно просто)
Аноним 20/08/15 Чтв 14:00:56 #246 №532949 
>>532944
http://en.cppreference.com/w/cpp/string/basic_string/stof
Аноним 20/08/15 Чтв 14:02:17 #247 №532950 
>>532949
А другими методами никак, или логикой?
Просто, я такое еще не изучал и в книге не затрагивалась эта тема...
Аноним 20/08/15 Чтв 14:17:31 #248 №532956 
>>532741
Ты, по-моему, умственно отсталый. Я помню эту задачу. У тебя число от 1 до 128 угадается не более чем за 7 попыток, т.к. log2(128) == 7.

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

Седьмой вопрос спрашивает, "это ли число?". Если да, овтет оно. Если нет, то ответ соседнее число.
Аноним 20/08/15 Чтв 14:25:44 #249 №532959 
>>532944
Перечисления Страуструп тоже забыл объяснить?
Аноним 20/08/15 Чтв 14:27:26 #250 №532961 
>>532950
Можешь и свои функции написать. Вот тебе подсказка https://ideone.com/BwfIKo
Аноним 20/08/15 Чтв 14:38:20 #251 №532963 
>>532956
>>532959
>>532961
Что-то вы меня раскритиковали, видимо действительно я отсталый и программирование - не моё.
Ну, ладно.
Аноним 20/08/15 Чтв 15:45:42 #252 №532993 
>>532963
Труп Страуса писал свою книгу основываясь на своих же лекциях, начисто упустив тот момент, что у студентов есть доп. литература, да и спросить у него можно. Поэтому либо менять книгу на попроще, либо страдать. Во втором случае если справишься, то научишься искать инфу в интернете и уровень знаний будет повыше. Но заебешься. Собственно советовать новичкам Страуструпа и Кнута для самостоятельного изучения это старый прикол, потому что они для этого слабо подходят.
Аноним 20/08/15 Чтв 16:11:29 #253 №533003 
>>532993
Кстати с C без плюсов все наоборот - книга K&R была написана будто совсем для домохозяек, при том без воды. Всегда если у кого затыки в базовых вещах, советую её читать, хоть это и другой язык.
Аноним 20/08/15 Чтв 16:21:51 #254 №533009 
a=b()+c(d(),e());
Правильно понимаю? Сначала b потом d или e порядок не определён, а потом c.
В каких ещё случаях есть неопределенный порядок выполнения?
Аноним 20/08/15 Чтв 16:38:41 #255 №533013 
>>533009
Вычисление аргументов функций, все арифметические операторы.
Собственно, строгий порядок только у операторов && и || и ,
В с++11 что-то там подкорректировали, но не сильно.
Аноним 20/08/15 Чтв 16:43:06 #256 №533016 
>>533013
>все арифметические операторы
b может не первой выполняться?
Аноним 20/08/15 Чтв 17:35:05 #257 №533072 
>>533016
Какая разница? Тебе моск больше нечем выебать?
Просто не пиши контекстно зависимые функций в одну строку и фсе.
Аноним 20/08/15 Чтв 17:37:56 #258 №533074 
>>533072
Проще же писать выражения с функциями. Потом ещё одну переменную заводить не удобно.
Аноним 20/08/15 Чтв 18:05:03 #259 №533095 
>>533009
Нет. Сложение это обычная функция - оператор, поэтому порядок между b и c тоже не определен. В твоем примере можно гарантировать только что d и e вычислятся раньше c.
Аноним 20/08/15 Чтв 18:07:07 #260 №533099 
>>533016
Может быть, например, в порядке d b e c a. И такое реально бывает из-за оптимизаций компилятора.
Аноним 20/08/15 Чтв 18:10:12 #261 №533103 
>>533009
Если вспомнишь, что в C++ есть operator+, а они не хотели бы, чтобы + вел себя по-разному для POD'ов и структур, то поймешь, что в этом отношении operator+ ведет себя так же, как любая другая функция.
Аноним 20/08/15 Чтв 18:29:14 #262 №533125 
>>532963
Кого ты блять слушаешь? А если в b тебе скажут что твоя мать шлюха ты поверишь? Если не понимаешь нихуя читай Лафоре. Там все понятно.
Аноним 20/08/15 Чтв 21:18:00 #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;
Аноним 20/08/15 Чтв 21:21:36 #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.
Аноним 20/08/15 Чтв 21:54:05 #265 №533293 
14400968459950.png
Прочитал страуструпа для нюфань почти всё понял. Теперь читаю лафоре чтобы всё закрепить. Он говорит про преобразование из одного класса в другой. Если оба этих класса сам писал. Так вот. Он пишет про оператор operator. А страуструп про него ни слова не сказал. Страуструп вроде позже на 5 лет вышел. Этот оператор не убрали? Почему про него страуструп не говорил?
Аноним 20/08/15 Чтв 21:57:33 #266 №533295 
>>533293
Потому что Страуструп хуево пишет для новичков.
Перегрузка операторов повсеместно используется.
Аноним 20/08/15 Чтв 23:04:01 #267 №533352 
>>533295
Про операторы он писал. А это как называется? Написано про это в главе про перегрузка операторов.
Аноним 20/08/15 Чтв 23:09:21 #268 №533363 
>>533293
Страуструп для этого конструкторы юзает, емнип.
Аноним 20/08/15 Чтв 23:16:26 #269 №533368 
>>533363
Тогда понятно. Тут и метод с конструкторами показали.
Аноним 20/08/15 Чтв 23:23:06 #270 №533374 
14401021867590.png
>>533293
Читайте Эккеля, у него много описано того, что всякие Страуструпы забывают.
Аноним 20/08/15 Чтв 23:26:34 #271 №533377 
>>533374
НА пике обычна перегрузка операторы вызова функции. Страуструп это не упускает.
Аноним 20/08/15 Чтв 23:46:05 #272 №533388 
Можно ли под линукс писать скрипты на с++?
Аноним 20/08/15 Чтв 23:47:45 #273 №533389 
>>533388
Нет.
Аноним 20/08/15 Чтв 23:56:53 #274 №533396 
14401042130580.png
Только посмотрите на этого аутиста. Так можно делать? Так модно делать? Так хоть кто-нибудь делает?
http://2ch.hk/b/res/100321630.html#100323740
Аноним 21/08/15 Птн 00:15:58 #275 №533402 
>>533396
cppcms.com
Это, по-твоему для ослов спроектировали?
Аноним 21/08/15 Птн 00:18:09 #276 №533405 
>>533402
Это существует? Лол.
Аноним 21/08/15 Птн 00:20:43 #277 №533410 
>>533405
Нет, не существует. Оставайся на своем пхп, питоджанге или чем вы там пользуетесь для веба.
Аноним 21/08/15 Птн 00:21:16 #278 №533411 
>>533396
Гугли CGI и его развитие. В хайлоаде часто встречаются вебсервисы на плюсах.
Аноним 21/08/15 Птн 01:31:14 #279 №533428 
>>533293
>Почему про него страуструп не говорил?
В очи долбитесь, уважаемый. Страуструп для ньюфань порядком много операторы перегружает.
Аноним 21/08/15 Птн 01:32:32 #280 №533429 
>>533428
Но про такой способ не рассказывал.
Аноним 21/08/15 Птн 07:18:37 #281 №533471 
Сап программач. Дошел до такой упоротой темы, как указатели. И возник у меня вопрос, зачем в таком случае придумали передачу переменной в функцию по ссылке, когда есть такая вещь, как указатели?
Глянул викижопию, по ней выходит, что просто для того, чтобы все время звездочки не хуярить.
Аноним 21/08/15 Птн 07:27:09 #282 №533472 
Коданы, а писать в builder и qtcreator - зашквар? На текущей работе альтернатив нет, вот и думаю, если увольняься, это будет котиррваться в других компаниях или нет.
Аноним 21/08/15 Птн 15:00:29 #283 №533487 
>>533293
Это не просто operator, это operator float

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

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

Вот передашь ты указатель на вектор, и что он тебе, v.size() расскажет?
Аноним 21/08/15 Птн 15:44:54 #286 №533505 
>>533497
Ты не знаешь про оператор разыменования или оператор -> ?

Ссылка - сахарок над указателями.
Аноним 21/08/15 Птн 15:47:43 #287 №533507 
>>533505
Не знаю. И знать (ПОКА ЧТО) особо не хочу, когда есть ссылки. Когда ссылки оверкилл, использую указатели.
Аноним 21/08/15 Птн 15:48:43 #288 №533508 
>>533507
Разыменование это унарная звездочка
Аноним 21/08/15 Птн 16:11:22 #289 №533519 
Задачка на нахождение простых чисел: https://bpaste.net/show/11707947f1b3
Аноним 21/08/15 Птн 16:13:01 #290 №533521 
>>533519
Не обязательно проверять на делимость со всеми числами меньше этого - достаточно проверить на делимость на все числа, которые меньше или равны sqrt(это число)
Аноним 21/08/15 Птн 17:57:06 #291 №533598 
14401690264270.png
Конструктор может менять константу?
Аноним 21/08/15 Птн 17:58:04 #292 №533599 
>>533598
Конструктор может инициализировать константу в списке инициализации (это то, что идет после двоеточия)
Аноним 21/08/15 Птн 18:02:54 #293 №533601 
>>533599
Каждый конструктор может своим значением её инициализировать? Можно константу при создании объекта сделать одной, а потом присвоить её другое значение вызвав другой конструктор?
Аноним 21/08/15 Птн 18:03:54 #294 №533602 
>>533601
Нельзя у уже существующего объекта вызвать конструктор.
Аноним 21/08/15 Птн 18:06:26 #295 №533606 
>>533472
Под винду котируют MS VS и QTcreator. Под никсами обычно всем похуй, хоть в консоль пиши.
Аноним 21/08/15 Птн 18:07:26 #296 №533608 
>>533602
Конструктор преобразования?
Аноним 21/08/15 Птн 18:08:00 #297 №533609 
>>533608
Что блядь?
Аноним 21/08/15 Птн 18:10:25 #298 №533613 
>>533608
В любом случае конструктор вызовется только один и только при создании объекта. Либо ты называешь конструктором что-то не являющееся конструктором, либо я не понимаю вопрос.
Аноним 21/08/15 Птн 18:15:11 #299 №533615 
>>533609
>>533613
Если объекту типа А присвоить значение объекта типа В то вызовется конструктор А с 1 параметром В. Этот конструктор может изменить константу?
Аноним 21/08/15 Птн 18:16:51 #300 №533617 
>>533615
Он ничего не изменяет, а инициализирует ее. До того, как он вызовется, этой константы нет, она еще не существует и ничему не равна.
Аноним 21/08/15 Птн 18:18:08 #301 №533618 
>>533617
Понял. Спасибо.
Аноним 21/08/15 Птн 18:41:14 #302 №533627 
14401716749190.jpg
Пикрел из Конкретная Математика, Кн-т да будет благословенно имя его.
Какого хуя, анон?
Где предположение что |z|<1 ?
Аноним 21/08/15 Птн 18:46:50 #303 №533630 
>>533627
Где ты тут С++ нашёл?
Аноним 21/08/15 Птн 18:51:17 #304 №533637 
>>533627
Либо Кнут, либо переводчик обосрался, либо там до этого было что-то написано, что ты пропустил. Скорее второе.
Аноним 21/08/15 Птн 20:28:09 #305 №533687 
>>533487
>Затем, что указатели были в C, а ссылок там не было. А потом страуструп придумал ссылки и сделал C++. И ссылки - они типа удобнее и безопаснее например потому что нельзя с ними арифметические операции проводить.
>

Т.е., преимуществ указателей над ссылками нету?
Аноним 21/08/15 Птн 20:30:02 #306 №533689 
>>533687
Над указателями можно арифметические операции проводить.
Аноним 23/08/15 Вск 10:09:36 #307 №533717 
>>533627
>Где предположение что |z|<1 ?
Ещё один "умник". Это формальные ряды. Буква z, x и т.п. вводится чисто для удобства и не имеет никакого числового значения.
Аноним 23/08/15 Вск 10:20:53 #308 №533719 
>>533717
Че?
Аноним 23/08/15 Вск 10:25:15 #309 №533720 
Тест.
Аноним 23/08/15 Вск 10:29:10 #310 №533723 
Что такое method1(const int var&); и method2(float var) const;?
Аноним 23/08/15 Вск 10:42:07 #311 №533738 
>>533627
Кнут типа альфач, показывает что срал на математиков с их глупым формализмом.
>>533723
Объявления функций или методов.
Аноним 23/08/15 Вск 10:48:44 #312 №533741 
>>533738
Да, это объявления методов. Но что значат эти const у методов и int& var или int var&?
Аноним 23/08/15 Вск 11:00:19 #313 №533745 
>>533723
method1 - принимает в качестве аргумента константную ссылку на int.
method2 - принимает в качестве аргумента float по значению и не изменяет объект, у которого вызывается.
Аноним 23/08/15 Вск 11:34:09 #314 №533758 
>>533719
Хуй тебе через плечо.
Аноним 23/08/15 Вск 11:35:13 #315 №533759 
>>533738
>Кнут типа альфач, показывает что срал на математиков с их глупым формализмом.
У формальных степенных рядов нормально всё с формализмом. Кнут срал на зашоренных идиотов, у которых ряды == комплексные ряды.
Аноним 23/08/15 Вск 12:47:31 #316 №533784 
>>533759
Ты z в старшей степени не потерял, петушок? При |z| > 1 это весьма критично.
Аноним 23/08/15 Вск 13:15:55 #317 №533800 
>>533784
Что такое модуль из z? z это просто символ.
Аноним 23/08/15 Вск 13:19:43 #318 №533806 
>>533800
При z < -1 || z > 1.
Аноним 23/08/15 Вск 13:20:48 #319 №533809 
>>533806
> z это просто символ
C / C++ Аноним 23/08/15 Вск 13:28:32 #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. А теперь хотелось бы что-то типа "фигурного мемсета" -- чтобы заполнить вторую половину массива теми же самыми значениями. При этом, разумеется, не хотелось бы второй раз считывать данные с жёсткого диска.

Т.е. нужно скопировать первую половину массива в его вторую половину БЕЗ ЦИКЛА, т.е. максимально быстро. Как?
Аноним 23/08/15 Вск 13:28:41 #321 №533815 
>>533687
Ну если ты питаешь отвращение к new, то нет.
Аноним 23/08/15 Вск 13:49:52 #322 №533830 
>>533814
Без цикла никак, такие операции должна память на уровне железа поддерживать, почитай документацию к своей памяти, но врядли такое есть вообще. Подобные операции усложнят архитектуру железа, если сейчас каждая ячейка памяти соединена с шиной, то для таких операций её еще нужно соединить со всеми остальными, что дорого. Там скорее всего есть поблочное копирование, собственно в памяти GPU сразу блоками копируется, но это блок, если данные не влазят в блок то без цикла все равно не скопируешь. А в обычной памяти и того может не быть.
Аноним 23/08/15 Вск 13:53:39 #323 №533831 
>>533814
>>533830
>собственно в памяти GPU сразу блоками копируется
И ещё это делают контроллеры DMA, есть в книгах Таненбаума. Перенёс байты — и прислал прерывание.
Аноним 23/08/15 Вск 14:20:18 #324 №533848 
>>533814
memcpy
Аноним 23/08/15 Вск 14:27:38 #325 №533858 
>>533848
> implying memcpy не использует цикл
Аноним 23/08/15 Вск 14:42:15 #326 №533866 
>>533814
>ifs.rdbuf()->pubsetbuf(0, 0);
Зачем эта строка и зачем нули? То что это буфер я понял, а почему ты его убрал нет.
>ifs.read(reinterpret_cast<char*>(current), streamsize);
Тут reinterpret_cast зачем и почему используешь read?
Аноним 23/08/15 Вск 15:16:59 #327 №533895 
Что такое реалтайм? Гуглиться что-то странное. На С++ в этом работу найти можно? Что для этого нужно изучать?
Аноним 23/08/15 Вск 15:29:05 #328 №533907 
>>533895
Возможно, это то, для чего создаются всякие FreeRTOS. Дальше гугли сам, потому что я подробностей не знаю.
Аноним 23/08/15 Вск 15:38:45 #329 №533914 
>>533907
Ты на работе что делаешь?
Аноним 23/08/15 Вск 15:48:52 #330 №533922 
>>533914
Ничего, я не работаю
Аноним 23/08/15 Вск 15:51:24 #331 №533926 
>>533922
Есть где список что делают С++ программисты? Не список вакансия, а статистика в какой области работа.
Аноним 23/08/15 Вск 16:06:59 #332 №533938 
>>533895
Реалтайм системы - это системы с фиксированным временем отклика. Разруливает все это планировщик ОС. Прикладные программы должны корректно обрабатывать сигналы.

Теперь вопрос - где здесь с/с++?
Аноним 23/08/15 Вск 16:10:40 #333 №533947 
>>533938
>Теперь вопрос - где здесь с/с++?
Спросил чем на С++ занимается. Сказали что-то про реалтайм где высокая производительность нужна. Спросил тут что это. Чем обычн С++ программисты занимаются?
Аноним 23/08/15 Вск 16:11:39 #334 №533950 
>>533938
>Теперь вопрос - где здесь с/с++?

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

где-здесь-C++-кун, заебал
Аноним 23/08/15 Вск 16:15:53 #335 №533956 
>>533947
Тем же, чем и другие программисты - пишут код, решают проблемы, создают системы. Си и плюсы чуть ближе к железу, больше простор для оптимизаций, поэтому их используют там, где нужна скорость и компактность: встраиваемые системы, высокопроизводительные системы (веб сервера тоже).
Аноним 23/08/15 Вск 16:20:58 #336 №533964 
>>533956
>встраиваемые системы, высокопроизводительные системы (веб сервера тоже).
Ну вот веб сервер это наверно интересно. Где про это почитать? Может кто из работающих рассказать про свой последний проект?
Аноним 23/08/15 Вск 16:23:16 #337 №533967 
>>533956
За себя могу рассказать ещё: работал в компании, создающей софт для биржевой торговли - от краулеров биржевых данных, которые прям на самих биржах крутятся, до клиентских терминалов. Там такой хайлоад и тайм-критикал, что пиздец.
Сейчас работаю в компании-производители автомобильной (и не только) навигации - встраиваемые системы, девайсы, онлайн-сервисы. А в основе всего ядро на плюсах. Тут и мемори-критикал и тайм-критикал. А еще ограничения железа всякие.
Аноним 23/08/15 Вск 16:24:24 #338 №533968 
>>533964
Апач, нгикс, тысячи их.
Аноним 23/08/15 Вск 16:26:37 #339 №533969 
14403363978280.png
>>533964
>Где про это почитать?
В книжках Ричарда Стивенса об устройстве сетей и серверов (у него две или три книги).
>Может кто из работающих рассказать про свой последний проект?
Примерно как на картинке. Основной процесс вызывает функцию «fork()» и дальше они работают раздельно.
Аноним 23/08/15 Вск 16:36:31 #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
Где твой код потом будет?
Аноним 23/08/15 Вск 16:39:33 #341 №533974 
>>533972
Qt

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

сотни тысяч его, сделай что-то свое
еще игры делают
Аноним 23/08/15 Вск 16:46:22 #342 №533979 
>>533974
Это не очень интересно выглядит. Хотел что низкоуровневое или связное с сетями. Но если не осилю, то можно и в Qt.
Аноним 23/08/15 Вск 18:37:16 #343 №534025 
>>533979
Поковыряй работу с устройствами - прямая работа с USB, например, - чтение и запись напрямую. Сделай из флешки токен авторизации. Под линукс - pam, под винду - логон менеджер.
Аноним 23/08/15 Вск 19:05:34 #344 №534046 
>>534025
>pam
Есть книга где научат? Или по документации делать?
Аноним 23/08/15 Вск 19:19:26 #345 №534056 
Начал изучение по шилдту, все жутко интересно но есть такое ощущение что я аутист и жутко медленно продвигаюсь
Кто за какое время осилил данную книгу? И эффективно ли будет попутно второй язык изучать? Или нет смысла?
Аноним 23/08/15 Вск 20:51:52 #346 №534107 
>>533858
нет, не использует
Аноним 23/08/15 Вск 21:06:48 #347 №534117 
>>534107
понятно, что в конце концов будет что-то вроде rep movs
Аноним 23/08/15 Вск 21:34:32 #348 №534140 
>>534046
Just google it
Аноним 23/08/15 Вск 21:36:47 #349 №534142 
>>534056
Если кто-то проглотил эту книжку за несколько дней - тебе легче станет? Учишь ты, а не кто-то. У тебя свой темп.

Другой язык лучше не брать. Разве что си или асм.
Аноним 23/08/15 Вск 21:43:01 #350 №534147 
14403553816600.png
>>534140
Аноним 23/08/15 Вск 21:55:08 #351 №534156 
>>534147
тупая шутка про хохлов

Тебя научить гуглом пользоваться?
Аноним 23/08/15 Вск 21:58:07 #352 №534159 
>>534156
Гугл нашел много коротких статей и 2 книги на английском. Что читать я так и не понял.
Аноним 24/08/15 Пнд 00:01:25 #353 №534252 
>>533848
>memcpy

Похоже на то, что нужно. Единственный момент:
>нужно скопировать первую половину массива в его вторую половину
>If the objects overlap, the behavior is undefined.

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

Требование non-overlapped для производительности - нет доп проверок и лишних копирований во временную область.
Аноним 24/08/15 Пнд 00:56:02 #355 №534267 
>>533741
Const у методов значит что этот метод можно вызывать даже если объект константный. А int& это ссылка, т.е. ты будешь менять ту переменную, которая передается как аргумент, а не ее копию.
Аноним 24/08/15 Пнд 08:59:29 #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);
Аноним 24/08/15 Пнд 09:04:10 #357 №534312 
14403962504970.jpg
Господа, может ли кто-то поделиться кряком для clion под линукс? Очень надо, в гугле грустинушка.
Аноним 24/08/15 Пнд 10:00:23 #358 №534329 
>>534309
dest = src + размер данных
Если размер массива 100 байт то должно быть что-то типа, только проверь что тип src указатель на void или char, иначе там при суммировании скорее всего хуита получится
std::memcpy(src + 50, src, 50);
Аноним 24/08/15 Пнд 10:20:38 #359 №534341 
>>534329
У меня uint16_t current размера 2 X streamsize (в байтах). То, что это массив short unsigned int (uint16_t), не критично для указателей memcpy? Вот я в этом не разбираюсь. То, что размер всего массива именно в БАЙТАХ мне точно известен как 2 X streamsize, я могу гарантировать. Тогда получается так:

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

или же мне нужно лепить какие-то там реинтепрет_касты в указатели на чар?
Аноним 24/08/15 Пнд 11:15:42 #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.
Аноним 24/08/15 Пнд 12:14:44 #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 скопировать в его вторую половину?
Аноним 24/08/15 Пнд 13:09:40 #362 №534435 
ну охуеть теперь
не может копирнуть полмассива в другую половину при помощи memcpy
Аноним 24/08/15 Пнд 13:27:23 #363 №534442 
>>534435
Без понятия, как там осуществляется сложение указателей: сложение адресов байтов или положений конкретного элемента.

Для чара это будет совпадать, для остальных типов нет.
Аноним 24/08/15 Пнд 16:03:19 #364 №534522 
>>534420
Запили свой код на ideone.com, чтобы понятно было, как у тебя работает, а анон тебе покажет, как в твоем случае вызывать memcpy.
Аноним 24/08/15 Пнд 22:20:07 #365 №534654 
>>531254 (OP)
Как дела сейчас на рынке вакансий в рашке и мире?

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

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

Это какая например?
Аноним 24/08/15 Пнд 23:03:03 #368 №534673 
>>533630
Нахуй пошел, ок?
Аноним 24/08/15 Пнд 23:07:26 #369 №534675 
>>533717
>>533759
Где ты видел комплексные ряды, пидор? Если z любой z больше 1, то ряд расходящийся, и нет у него асимптотической суммы.
Ебнутый ты даун, у меня просто РЕКУРСИЯ от мамкиных математиков, немогущих в детские ряды.
Аноним 24/08/15 Пнд 23:10:18 #370 №534676 
>>533627
При |z| >= 1 в бесконечной сумме возникает undefined behavior поэтому на корректность утверждения всем насрать. Оптимизацию впервые увидел чтоли? Точно по той же причине, например, компилятор вправе проебать все твои проверки указателей на нуллы если ты до них пытаешься указатель разыменовать - на нулле это неопределенная операция, поэтому предполагается, что так не бывает.
Аноним 24/08/15 Пнд 23:52:14 #371 №534687 
>>534676
>впервые увидел чтоли?
Ну, я какбы нуб...
Аноним 24/08/15 Пнд 23:56:27 #372 №534688 
Так в чем же отличие между "int *a = new int;" и "int a;"? Во втором случае нельзя удалить переменную что-ли?
Аноним 24/08/15 Пнд 23:58:53 #373 №534689 
>>534688
Анус себе удали.
Аноним 25/08/15 Втр 00:01:04 #374 №534690 
>>534688
В первом случае она будет расположена в куче, а во втором — в стеке.
Аноним 25/08/15 Втр 00:02:45 #375 №534692 
>>534669
Проезд на мётрах 100500 млн.руб.
И ето токо в одну сторону!!!
Аноним 25/08/15 Втр 00:21:04 #376 №534700 
>>534690
И в чем разница?
Аноним 25/08/15 Втр 00:27:46 #377 №534704 
>>534692
Оно-то будет, проблема в том, что раньше хотя бы от этого можно было съебать, а теперь ПРИДЕТСЯ ЭТО ТЕРПЕТЬ, потому что по всей видимости упадет спрос на программистов в мире в целом, а предложение на рынке труда только вырастет за счет выкинутых на улицу в период крузиса.

На внутреннем рынке работы тоже уже стало меньше, хотя мы дно еще даже не нащупали.
Аноним 25/08/15 Втр 01:04:51 #378 №534725 
>>534704
Крах дот-бума бодижопы как-то пережили, новых даже наплодилось.
Аноним 25/08/15 Втр 02:47:45 #379 №534744 
>>534700
Бамп вопросу. Между статической и динамической памятью отличия знаю.
мимо
Аноним 25/08/15 Втр 03:05:35 #380 №534747 
>>534744
Ссылку на что-то в куче ты можешь использовать в другом треде, например, а стек у каждого треда свой.
Аноним 25/08/15 Втр 12:11:14 #381 №534760 
>>534688
int a - будет в стеке, удалится при завершении scope'а, это быстрее, чем выделять память в куче

int* a = new int; - создастся в куче, это медленнее, потому что надо запрашивать память у операционной системы, не удалится при завершении scope'а, а удалится когда удалишь.
Аноним 25/08/15 Втр 12:33:00 #382 №534770 
>>534744
С аппаратной точки зрения - стек = процессор, куча = оперативка.
Аноним 25/08/15 Втр 12:45:57 #383 №534776 
>>534760
А если, например, есть цикл, а в нем есть "long a, b, c, d = 0;" и "double e, f, g, h, j, k = 0;", то что будет быстрее - выделить один раз перед циклом в оперативке, или каждую итерацию выделять в стеке? Я предполагаю, что компилятор может выделить один раз в стеке, а потом просто каждый раз сбрасывать значения, - этот вопрос скорее относится ко всяким функциям, которые едят входные данные и возвращают результат. Насколько дорого по скорости обходятся такие выделения, и стоит ли экономить на вспомогательных переменных в таких функциях?
Аноним 25/08/15 Втр 13:07:31 #384 №534784 
>>534776
Ну, если компилировать с каким нибудь -o2 -- ещё и не такое сделает. Нет, стёк будет быстрее даже если каждый раз выделять по новой. Нет, экономить на переменных не стоит, прироста ты не увидишь (если у тебя не будет овер 9000 раз выделятся по мегабайту в цикле). Выделять память в куче и передавать её по указателям стоит только тогда, когда объём информации = овердохуя. Даже чтобы передать какой нибудь long long куча себя не оправдает. А вот если например есть 5 мб текста - оправдает многократно.
Аноним 25/08/15 Втр 13:11:14 #385 №534786 
>>534770
>стек = процессор
Ловите наркомана.
Аноним 25/08/15 Втр 13:15:59 #386 №534792 
>>534786
https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA#.D0.90.D0.BF.D0.BF.D0.B0.D1.80.D0.B0.D1.82.D0.BD.D1.8B.D0.B9_.D1.81.D1.82.D0.B5.D0.BA
Ловите дегенеративную мартышку
sageАноним 25/08/15 Втр 13:54:40 #387 №534805 
>>534792
>В архитектуре X86 аппаратный стек — непрерывная область памяти
sageАноним 25/08/15 Втр 13:59:19 #388 №534808 
>>534744
Разница в том что стек фиксированного небольшого размера и очищается автоматически, плюс если от стековой переменной нигде не берется адрес то компилятор ее может в регистры запихать. Больше никакой.
>>534747
Ссылку на стек тоже можно передать, только надо сделать какой-нибудь лок чтобы он не уничтожился выходом из функции.
Аноним 25/08/15 Втр 14:00:34 #389 №534811 
>>534700
в первом случае еще нужно будет вручную удалить потом
Аноним 25/08/15 Втр 14:24:58 #390 №534821 
Нашёл рабочий тут
http://www.mac-torrent-download.net/application/developer-tools/clion-1-0/
>>534312-кум
Аноним 25/08/15 Втр 14:50:40 #391 №534831 
>>534805
https://ru.wikipedia.org/wiki/%D0%9A%D1%8D%D1%88_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0#.D0.92_X86
Аноним 25/08/15 Втр 15:38:42 #392 №534849 
Поясните нубу как работает брейк, а то я не совсем понимаю.
Как я понял - как бы глубоко он не был, он останавливает всегда весь цикл?
Т.е. например:
for ...
if
if
break - тут он останавливает (если сработает) 1 ступень цикла for как глубого в ифах он бы не был?
sageАноним 25/08/15 Втр 15:57:23 #393 №534858 
>>534831
И что?
Аноним 25/08/15 Втр 17:08:24 #394 №534881 
>>534849
Да. Можно даже сказать, что это локальный return, если тебе так будет понятней.
Аноним 25/08/15 Втр 18:24:48 #395 №534904 
>>534770
Это не правда
Аноним 25/08/15 Втр 18:25:56 #396 №534905 
>>534776
Можно считать, что "выделять" что-то в стеке - вообще бесплатно, потому что на самом деле там ничего выделять не надо в отличие от динамической памяти, а надо всего лишь значение регистра изменить.
Аноним 25/08/15 Втр 18:26:58 #397 №534907 
>>534849
Брейк останавливает самый внутренний цикл.
Аноним 25/08/15 Втр 18:35:29 #398 №534910 
>>534849
Да, break останавливает ближайший (наиболее вложенный) for/while/do/switch, на if и простые { блоки } не влияет.
Аноним 25/08/15 Втр 18:39:46 #399 №534913 
>>534910
>>534907
Причем самый вложенный цикл определяется статически во время компиляции. То есть например ты не можешь создать функцию без каких-либо циклов, написать в ней break и надяться, что если ты ее запустишь из цикла, то break сработает.
Аноним 25/08/15 Втр 19:09:41 #400 №534925 
>>534744
Выделенная в куче память доступна на протяжении работы программы. Если ты выделяешь ее, например, внутри функции, и забываешь освободить, то ты допускаешь утечку памяти. Твоя программа начинает пожирать все больше и больше с каждым вызовом функции, пока система не начнет сбрасывать то, что не помещается, в файл подкачки. Частые выделения и освобождения произвольных кусков памяти разного размера приводят к быстрой фрагментации (Образуются дырки между выделенными участками памяти), что может замедлить работу программы.

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

Что это вообще значит? Как ты можешь выделять все больше и больше памяти в стеке циклом, а не рекурсивной функцией?
Аноним 25/08/15 Втр 20:45:33 #402 №534978 
>>534968
Можно зделоть
https://msdn.microsoft.com/en-us/library/wb1s57t5.aspx
Ну он еблан явно и не поинмает, что пишет, но в теории это возможно
Аноним 25/08/15 Втр 20:49:57 #403 №534982 
>>534968
По-читерски, можно в цикле плодить threads, первым закончится именно стек.
Аноним 25/08/15 Втр 20:52:42 #404 №534985 
>>534968
По-читерски, можно в цикле плодить threads, первым закончится именно стек.
Аноним 25/08/15 Втр 20:53:59 #405 №534986 
>>534982
У тредов свои собственные стеки, а сегменты памяти могут расти. Поясни своё высказывание
Аноним 25/08/15 Втр 20:54:48 #406 №534987 
>>534982
У тредов свои собственные стеки, а сегменты памяти могут расти. Поясни своё высказывание
Аноним 25/08/15 Втр 21:10:32 #407 №534998 
>>534987
Все популярные конпеляторы/libc выделяют стек на процесс статически, плодя треды, ты это пространство быстро израсходуешь.
Аноним 26/08/15 Срд 00:15:46 #408 №535065 
Почему я иногда вижу фигурные скобки в списке инициализации? Я всегда круглые делал. Это имеет какое-то значение?
>Handle(Handle&& h) :p{h.p} { h.p=nullptr; }
Аноним 26/08/15 Срд 00:19:46 #409 №535069 
>>535065
g://c++ uniform initialization
Аноним 26/08/15 Срд 02:34:18 #410 №535130 
>>535065
В c++11 ввели uniform initialization
Аноним 26/08/15 Срд 02:35:31 #411 №535131 
>>534998
В Windows набор страниц для стека у каждого потока свой, размер выставляется явно, лимита на общий размер стеков всех потоков нет.
Аноним 26/08/15 Срд 04:08:52 #412 №535148 
>>534309
> Спасибо, это я прекрасно понимаю сразу после прочтения en.cppreference. Но там не было уточнено, что такое overlap.
Это когда ты берёшь первые 2/3 массива и копируешь их в последние 2/3 массива. Или вместо 2/3 берёшь полмассива с округлением вверх.
Аноним 26/08/15 Срд 16:21:32 #413 №535337 
>>533352
>А это как называется?
Оператор приведения типа.
Аноним 26/08/15 Срд 16:57:55 #414 №535349 
>>535337
Спасибо. Уже забыл про эту главу.
Аноним 27/08/15 Чтв 10:08:26 #415 №535416 
Каким образом в конструктор класса можно передать функцию, так, чтобы переопределить метод?
Конкретно, хочу реализовать кучу, в которой бы в конструктор можно было передать функцию сравнения двух элементов.
Попробовал через указатель на функцию, но выглядит по-идиотски.

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

}
MinHeap(bool (
cmp_func)(T, T)) {
cmp = cmp_func;
}
};
Аноним 27/08/15 Чтв 10:42:59 #416 №535423 
>>535416
для этого придумали наследование, интерфейсы, абстрактные классы. А ты продолжаешь работать в C-style
Аноним 27/08/15 Чтв 11:02:54 #417 №535427 
>>535416
http://ideone.com/fvCSkJ
Аноним 27/08/15 Чтв 14:19:11 #418 №535471 
>>535423
У него же наверное инъекция зависимости.
>>535416
Есть вариант функтор передавать. Много лишней писанины, но более гибкий и надежный (контроль типов, можно передать только нужные функторы а не любую функцию с подходящей сигнатурой).
Аноним 27/08/15 Чтв 15:14:39 #419 №535512 
>>535416
Наверняка ты хочешь сделать полную хуйню, которую не надо делать, но если все же надо, то принимай в конструкторе аргумент типа std::function, инициализируй им член и его и используй.
Аноним 27/08/15 Чтв 18:01:29 #420 №535588 
Вопрос по Qt.

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

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

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

А по названию предположу, что MinGW-64 - под архитектуру x86_64, а MinGW - наверное x86.
Аноним 27/08/15 Чтв 18:53:35 #423 №535620 
MinGW - это minimalist gnu for windows, минимум необходимого для компилятора. А вот cygwin - это йоба
Аноним 27/08/15 Чтв 20:51:43 #424 №535672 
>>535589
mingw - для разработки нативных приложений под винду, вроде как заброшен, а разработка продолжается в mingw-w64, который может не только в 32 бита, но и в 64. Cygwin - эмуляция позикса под виндой, типа как wine на лине работает, некоторые хардкорно линуксовые приложения могут поддерживать конпеляцию под cygwin, но не под mingw, т.к. разрабы срали на поддержку винды.
Аноним 27/08/15 Чтв 20:55:28 #425 №535676 
>>535672
>>535620
>>535619
А вы с ними делали что-нибудь? А то у меня на Eclipse CDT и MinGW иногда дебаггер отваливается.
Аноним 27/08/15 Чтв 22:44:18 #426 №535724 
>>535427
Спасибо!
>>535471

Но, что в случае функтора, что в случае передачи непосредственно функции, мне непонятно, как сделать дефолтный метод, если в конструктор не был передан аргумент.
Аноним 27/08/15 Чтв 22:59:56 #427 №535730 
>>531254 (OP)

А книги из оппоста разве актуальны?
Аноним 27/08/15 Чтв 23:51:38 #428 №535754 
>>535724
Дефолтным методом делаешь оператор сравнения.
Аноним 28/08/15 Птн 01:49:16 #429 №535786 
>>535730
Тебе какая-то конкретная книга нужна?
Аноним 28/08/15 Птн 01:54:54 #430 №535787 
Раз скоро перекат, ОП добавь в список книг про алгоритмы на С++. На С фамилия автора. У него ещё вроде несколько томов и книга по яве.
Аноним 28/08/15 Птн 02:15:21 #431 №535789 
Спрошу ещё по указателям. Есть два массива типа int одинакового размера, которые созданы с помощью malloc:

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

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

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

?
Аноним 28/08/15 Птн 02:19:30 #432 №535790 
>>535789
тип array_1 и array_2 - int@? То есть это указатели на int? Если да, то присваивание делает так, что array_2 указывает туда же, куда и array_1.
Аноним 28/08/15 Птн 02:23:03 #433 №535791 
>>535789
Записывает адрес array_1[0] в array_2[0]
https://ideone.com/OncbYL
Аноним 28/08/15 Птн 04:09:51 #434 №535800 
>>535131
Ну в Windows свои приколы, http://blogs.msdn.com/b/oldnewthing/archive/2005/07/29/444912.aspx
если 32 бита ещё кому-то интересны, конечно
Аноним 28/08/15 Птн 09:34:55 #435 №535825 
>>535787
Седжвик
Аноним 28/08/15 Птн 11:13:40 #436 №535851 
>>535588
> При попытке запустить debugging выдаёт "no debugger set up".
> Можно ли задействовать debagger от visual studio?
В настройках (внезапно) задается путь к дебаггеру, какой тебе нужен, раз сам не нашелся.
> Дебаггер не идёт в комплекте с creator?
Qt Creator это ide, всё. Кроссплатформенная причем, везде со своими дебаггерами. Впрочем, под виндой, насколько помню, можно в комплекте с MinGW накатить, там тебе все мокрописьки из коробки будут.
Аноним 28/08/15 Птн 11:39:39 #437 №535858 
>>535851
Мне пришлось windows sdk tools скачать. У меня насколько я понял не mingw, а msvc.
Сотственный аллокатор Аноним 28/08/15 Птн 11:39:41 #438 №535859 
Мне в программе нужно создавать миллионы объектов разных видов, и иметь возможность уничтожить их в долю секунты. Стандартный delete их убивает по одному очень долго.
Поэтому написал свой аллокатор по типу pool. Я знаю, что в бусте есть то же самое, но мне было интересно научиться, к тому же, мой аллокатор в итоге работает чуть быстрее даже.

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

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

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

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

Кстати, я заметил что мне проще решить задачку, расписывая её в тетради, а потом уже перенося в программу, а не сразу. Т.е. в тетради я сразу вижу ошибку, а в программе нет - значит я устарел или вы так же делаете?
Аноним 28/08/15 Птн 13:34:13 #441 №535910 
>>535825
Да. Он. Добавь в шапку. Скоро его начну читать.
Аноним 28/08/15 Птн 14:22:48 #442 №535945 
>>535861
А ещё проще — воткнуть RAM-семафор, он же lock, выбрав самый быстрый. Тогда доступ к области памяти из двух потоков пойдёт синхронно.
>>535876
Я тоже так делаю.
Аноним 28/08/15 Птн 14:27:04 #443 №535949 
>>535861
Или, если не нравится семафор, есть ещё thread local memory, можно оставить указатель на пул в ней.
Аноним 28/08/15 Птн 14:54:57 #444 №535958 
>>535876
А оно правильно работает? А то ведь если ты в векторе делаешь erase, то его .size() изменяется
Аноним 28/08/15 Птн 14:59:57 #445 №535966 
>>535958
Работает правильно, я так и задумывал с удалением и изменением размера вектора.
Например: берётся число 2, удаляются все числа, которые делятся на 2 без остатка и вектор сокращается на это число. Потом берётся число 3, и проверяет деление уже оставшихся чисел - это суть решета Эрастофена.
Аноним 28/08/15 Птн 15:16:36 #446 №535973 
>>535949
Нет, проблема не в многопоточности. Это у меня в самом аллокаторе уже реализовано. Проблема в двух экземплярах одного плагина - обе они используют один и тот же пул, потому, что пул объявлен как static, чтобы быть общим для всех объектов класса, унаследованного от FastpoolAllocator. В рамках одного плагина это даже удобно.
Аноним 29/08/15 Суб 17:42:14 #447 №536435 
Вызывать деструктор обьекта в методе класса ведь не противозаконно?
Аноним 29/08/15 Суб 17:43:57 #448 №536437 
>>536435
Ты слишком обще и непонятно написал, так что могу сказать лишь что вызывать вручную деструктор - легально.
Аноним 29/08/15 Суб 17:51:21 #449 №536441 
bomb.blow_up();
cbobmb::blow_up
{
//четоделаем
//вызываем деструктор объекта
}
Аноним 29/08/15 Суб 18:10:34 #450 №536446 
>>536441
Деструктор того объекта, чей метод вызывается?
Аноним 29/08/15 Суб 18:12:19 #451 №536447 
>>536446
Естественно.
Аноним 29/08/15 Суб 19:18:24 #452 №536491 
>>536447
Делать так можно, но надо быть аккуратнее с дальнейшим использованием объекта. Такое применяется часто для синглтонов, когда некий статический метод уничтожает объект синглтона
Аноним 29/08/15 Суб 19:21:11 #453 №536492 
>>536491
Как правильно организовать самоуничтожение объекта? Как-то глупо, если за вызов деструктора для той-же бомбы отвечает внешняя среда.
Аноним 29/08/15 Суб 20:48:41 #454 №536527 
>>536492
> Как-то глупо, если за вызов деструктора для той-же бомбы отвечает внешняя среда.
Почему глупо? Это правильный подход когда тот кто создает объект его же и уничтожает. Это конечно же не всегда можно красиво сделать, например когда объект используют в нескольких других местах - в таких случаях лучше шаред поинтер навернуть, который и удалит объект когда он станет не нужен. А так как объекты сами не принимают решение о своем создании, делать так чтобы объект сам себя удалял нужно только когда это действительно упрощает программу.
Аноним 29/08/15 Суб 21:00:36 #455 №536531 
Аноны, недавно я просто угорел по указателям! Я использую их везде, даже в циклах!

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

Насколько это плохо и стоит ли бросать?
sageАноним 29/08/15 Суб 21:12:08 #456 №536535 
>>536531
Аллокация на стеке намного быстрее
Аноним 29/08/15 Суб 21:12:51 #457 №536536 
>>536535
Сажа приклеилась
Аноним 29/08/15 Суб 22:03:45 #458 №536566 
>>531254 (OP)
Надо работать с базой postgersql на vs15, что посоветуете?
Аноним 29/08/15 Суб 22:06:02 #459 №536570 
>>536531
new это долго
Аноним 29/08/15 Суб 22:46:59 #460 №536590 
А какой софт вы вообще пишите?
Аноним 30/08/15 Вск 01:24:59 #461 №536671 
>>536531
Это глупо и бесполезно, местами вредно. Умерь пыл.
Аноним 30/08/15 Вск 02:58:41 #462 №536702 
>>536531
Эта хуйня нихуя работать не будет. Ты звёздочек забыл, долбоёб.
И да, сука, кипяти океаны бесполезными операциями.
Аноним 30/08/15 Вск 11:37:24 #463 №536762 
>>531563
Страуструп как раз-таки стандарт не читает, судя по его книге по C++11 для ньюфагов.
Аноним 30/08/15 Вск 14:21:06 #464 №536803 
>>536762
Чукча не читатель, чукча писатель. Вообще, последнее издание "языка C++" уже с учетом всех фишек C++11, но оно пока только на ангельском.
>>536531
Перетолстил, братюнь.
>>536535
Там память утекает, скорость это еще не самое страшное.
>>536492
Так они ведь и так "самоуничтожаются". Деструктор вызовется при выходе из области видимости автоматически, в случае кучи можно просто использовать unique_ptr, и будет тоже автоматически удаляться.
>>535910 >>535787
Ага. Тащемта, это я и написал выше, что стоит ее добавить.
>>535789
>2015
>malloc
>>535730
Они самые актуальные из существующих на русском, а в большинстве случаев и вообще только у нескольких русские издания отстают. Все старые книжки там не на тему синтаксиса, поэтому советы актуальны и сейчас почти все. Например, книги о шаблонах довольно старые, но лучше за десять лет ничего не написали, а большая часть информации осталась полезной, хотя с variadic templates многое стало можно сделать проще.
>>534786
Он, возможно, имел в виду регистровые буферы, регистровые окна и вот это все.
Аноним 30/08/15 Вск 15:00:10 #465 №536812 
>>536803
Что ты имеешь против маллока?
Аноним 30/08/15 Вск 15:07:13 #466 №536817 
ITT буду задавать дебиль ные вопросы по Qt.
Если я наследуюсь от QObject и вставляю Q_OBJECT макрос, будут ли объекты моего класса автоматически удаляться?
Аноним 30/08/15 Вск 15:47:01 #467 №536847 
>>536817
Зависит от условий. В общем случае не будут.
Аноним 30/08/15 Вск 15:53:25 #468 №536850 
>>536812
new это встроенный оператор, он может быть реализован компилятором гораздо эффективнее, чем вызов malloc, который обязан передаваться ОС. Юзать пул, например, или использовать данные об объектах, для которых выделяется память, чтобы уменьшить фрагментацию и позволить данным лучше кэшироваться в результате.
Аноним 30/08/15 Вск 15:55:21 #469 №536852 
>>536847
Ок, добавлю delete. А когда будут?
Аноним 30/08/15 Вск 16:01:14 #470 №536856 
>>536702
Звёздочку съела макаба. Смотри, там же курсив пошёл.
Аноним 30/08/15 Вск 16:04:24 #471 №536858 
>>536671
Я уже не могу смотреть на переменные без приставок. Например int i; Ну что это такое? Вот понимаю - int *i; Да, это классно смотрится. Ещё есть какие-то reference. Расскажите про них?
Аноним 30/08/15 Вск 16:25:39 #472 №536875 
14409411392230.jpg
>>536858
Аноним 30/08/15 Вск 16:59:23 #473 №536897 
Вот еще 2 вопроса:
[code]

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

[/code]
Можно ли его вызывать с лямбдой вместо обертки над слотом? Как передать в колбэк сам QWebView *view, к которому аттачим листенер?
Аноним 30/08/15 Вск 17:12:37 #474 №536906 
>>531254 (OP)
> Оффициальный
одна ф
Аноним 30/08/15 Вск 18:00:11 #475 №536927 
>>536852
Объект в крестах удаляется только тогда, когда ты вызываешь delete, либо когда он выходит из скоупа (впрочем, во втором случае опять же неявно вызывается delete). Для указателя это тоже верно: сам указатель удаляется. А вот объект, на который он указывает - нет. В Qt нет никаких специальных GC или чего-то подобного, так что все сводится к вызову delete и выходу из скоупа. Пллюс еще, если у объекта есть родитель, то при удалении родителя будет удален и этот объект (и все другие дочерние объекты).
sageАноним 30/08/15 Вск 18:00:33 #476 №536929 
>>536906
Ловите мелкобуквенного ньюфага.
sageАноним 30/08/15 Вск 18:01:24 #477 №536931 
>>536897
Можно. QSignalMapper + дальше qobject_cast.
Аноним 30/08/15 Вск 18:03:15 #478 №536933 
>>536929
> сделал орфографическую ошибку
> я всё правильно написал а ты ньюфаг и не понимаешь глубокого смысла
Аноним 30/08/15 Вск 18:08:23 #479 №536935 
Я верю, что тут знают. Как мне из Visual Studio 2010 выдрать компилятор, и прочие хэдеры/либы? Накатывать саму студию займет слишком дохуя места, да и как IDE она мне не нравиться.
Аноним 30/08/15 Вск 18:13:43 #480 №536940 
>>536935
Зачем тебе именно VS2010?
Аноним 30/08/15 Вск 18:15:34 #481 №536942 
>>536940
2012 на ХР уже не работает.
Аноним 30/08/15 Вск 18:29:23 #482 №536946 
>>536942
Поставь MinGW.
Аноним 30/08/15 Вск 18:32:22 #483 №536947 
>>536935
Хэдеры лежат в "путь_к_папке_с_программой\VC\include", причем у стандартных нет расширения, поэтому придется добавить .h. cpp файлов вообще нигде нет, как и объектников, соответствующих единственному хэдеру. Те объектники, из которых все собирается, лежат в "путь_к_папке_с_программой\VC\bin", но там хер проссышь, какие именно линковать вручную, а для подмены с другим компилятором вряд ли подойдут, ибо внутренние форматы зело разные.

Советую не париться с либами и другим компилятором, а накатить отдельно Visual C++ как когда игоры устанавливаешь, можно будет компилировать из консольки.
Аноним 30/08/15 Вск 18:34:11 #484 №536949 
>>536935
Кодблокс сам у тебя спросит какой компилятор использовать если хочешь сменить IDE но оставить компилятор.
Аноним 30/08/15 Вск 18:36:09 #485 №536952 
>>536946
Там наркоманский at&t синтаксис ассемблера.
>>536947
Последнюю строку нихуя не понял, подробнее.
>>536949
Как ты узнал, что я на него решил перекатиться Для этого нужно тогда снести саму студию, но оставить компилятор и прочее, ибо 80гб хард - это не шутки.
Аноним 30/08/15 Вск 18:36:18 #486 №536953 
>>536927
А как Qtшный смартпойнтер называется?
>>536931
Спасибо, покурю
Аноним 30/08/15 Вск 18:36:47 #487 №536954 
>>536933
Детка, это /pr, тут еще есть олдфаги, которые помнят, как это слово нужно писать на двачах.
Аноним 30/08/15 Вск 18:41:03 #488 №536956 
>>536952
Ставишь Visual C++ отдельно, без студии. В папке с ним будет бинарник, которым можно компилировать из консоли, как с gcc.
Аноним 30/08/15 Вск 18:42:27 #489 №536958 
>>536956
Так, уже лучше. Redist что-ли?
Аноним 30/08/15 Вск 18:48:10 #490 №536961 
>>536958
Нет, вот такое: http://www.microsoft.com/en-us/download/details.aspx?id=41151
Аноним 30/08/15 Вск 18:56:00 #491 №536966 
>>536961
Внезапно обнаружил у себя в закладках. Спасибо, пойду ставить.
sageАноним 30/08/15 Вск 19:35:06 #492 №536980 
>>536953
QPointer, как ни странно.
Аноним 31/08/15 Пнд 00:24:27 #493 №537109 
>>536850
Оператор new определён в libstdc++, а это не компилятор хоть и идёт, обычно, вместе с ним.
И точно так же как и маллок должен идти в ОСь, ибо откуда он память возьмёт? А зачастую он вообще маллок и пользует.

>>536856
Ну тогда откат наезда. Заработает, съест память, вскипятит океаны и заработает...
И да, кто освобождать-то память будет?
Аноним 31/08/15 Пнд 01:09:49 #494 №537125 
>>537109
Не путай оператор new и функцию operator new. Первое - часть ядра языка, которая не имеет отношения к библиотекам, жестко зашитая в компилятор. Второе - обычная перегружаемая библиотечная функция.
Память она возьмет, но гораздо реже, чем голый маллок. Например, она может брать ее сразу по мегабайту и потом раздавать по кусочкам, или использовать хитрые платформозависимые стратегии.
Аноним 31/08/15 Пнд 01:31:02 #495 №537131 
НОВЫЙ ТРЕД
https://2ch.hk/pr/res/537129.html
https://2ch.hk/pr/res/537129.html
https://2ch.hk/pr/res/537129.html
Чтобы ночью не караулить бамплимит. Добивайте этот и переходите.
Аноним 31/08/15 Пнд 01:41:06 #496 №537134 
>>537131
Ссылку нормальную сделай.
Аноним 31/08/15 Пнд 02:07:52 #497 №537142 
>>537134
Какую ссылку? Эта тройная нормальная, открывается, не?
Аноним 31/08/15 Пнд 02:25:00 #498 №537148 
>>537142
Такую, какая у тебя в первой строке.
Аноним 01/09/15 Втр 11:08:18 #499 №537793 
>>537129 (OP)
sageАноним 04/09/15 Птн 14:39:54 #500 №539530 
[code]рпрп[/code]
sageАноним 04/09/15 Птн 14:40:10 #501 №539531 
[code]
рарпр
[/code]
comments powered by Disqus

Отзывы и предложения