Это копия, сохраненная 27 октября 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Ответы на все вопросы - http://en.cppreference.com/w/ http://www.cplusplus.com/reference/
Прошлый - https://2ch.hk/pr/res/1045411.html (М)
Незачто
Объясняй почему int a = ({5;}); работает, и как?
И почему clang и gcc это понимают, а vc не особо?
Нагуглил что это расхождение со стандартом, и называется GNU statement expression
так-что не подходит :(
Да, я тоже не понимаю, зачем в языке вводить какие-то statements, когда всё может быть expression.
>statement expression
GNU statement expressions
https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
>>1063148
прост))
Т.е. выражение с точкой-запятой в конце это statement expression? Вопрос, нахуя ставить там точку с запятой?
А statement block это тоже statement expression, какое значение он принимает?
Вон из треда, лиспер поганый.
Это явно не относится к C++. Может кто-то так называет C#?
Да, если ты стьюдент.
Да, старость - не радость... Все когда-нибудь там будем.
почитай хабр ))))
А вообще чтобы понять как это всё работает - попробуй навелосипедить <type_traits>
можно иногда даже сюда вопросы поконкретнее писать наверное
>Посоветуйте что-нибудь фундаментальное о шаблонах
Стандарт
> из каких этапов состоит их разбор, на каком этапе сборки работают шаблоны
http://en.cppreference.com/w/cpp/language/translation_phases
template <template <typename Created> class CreationPolicy>
class WidgetManager2 : public CreationPolicy<int>
{
};
1. template <typename Created> class CreationPolicy - объявляется шалонный класс CreationPolicy с параметром типа Created
2. Этот класс используется как параметр типа по умолчанию во внешнем шаблоне
Я прав? Нихуя не понял.
template <template <typename Created> typename CreationPolicy>
class WidgetManager2 : public CreationPolicy<int>
{
};
Почему?
Одно и то же при объявлении типа, но там ведь объявляется шаблонный класс, значит, должно использоваться только слово class.
нууу, ты говоришь компилятору
"класс виджетМэнэджер2 - шаблонный, параметр шаблона - шаблонный класс, который в скоупе класса будет называться КриейшнПолиси"
Как ещё ответить на этот вопрос? Если ты вообще понятия не имеешь что такое шаблоны в с++, попробуй пописать простой умный указатель, или аналог std::array, это будет попроще чем "параметризация шаблона шаблонным классом"
>Если ты вообще понятия не имеешь что такое шаблоны в с++, попробуй пописать простой умный указатель
Уже писал, но от шаблонных параметров шаблона у меня вывих мозга. Не могу даже распарсить объявление.
template <int i> int func() {
return func<i-1>()+i;
};
template <> int func<0>() {
return 0;
};
Какой-то уебищный pattern matching.
Пишу на плюсах лет 20. Сегодня узнал о синтаксисе
int main try {
//code...
return 0;
} catch ( e ) { ... }
Убейте меня кто нибудь.
Это да. function try block не самая известная штука.
PCG (http://www.pcg-random.org/download.html) - лучший рандом.
STB (https://github.com/nothings/stb) - коллекция header-only либ на разные случаи жизни (загрузка картинок, редактор текста, генерация карт)
POCO, RakNet, libyojimbo - довольно тяжелые, но мощные либы для обмена по сетке в реалтайме
Catch (https://github.com/philsquared/Catch/blob/master/docs/tutorial.md) - компактный юнит тест фреймворк
range v3, arrayview - современный синтаксический сахар
Boost SML (https://github.com/boost-experimental/sml) - либа для построения конечных автоматов.
Scientist (https://github.com/tomiaijo/scientist) - либа для тестирования разных веток исполнения кода (зарефакторил код, а она рандомно гоняет обе ветки, ты потом сравниваешь корректность и скорость)
REACT-CPP-MYSQL, cpp.react, flowcpp, https://github.com/tower120/reactive - разные либы для событий, реактивное программирование
emscripten - компилируешь c++ в html+js и твой шедевр работает в браузере
libRocket (https://github.com/libRocket/libRocket) - старая либа для встройки интерфейса подмножества псевдо-html, для тех кто не хочет тащить хромиум.
Gumbo (https://github.com/cschanaj/gumbo-parser-cpp + https://github.com/lazytiger/gumbo-query) парсинг html сайтов.
Ты передаёшь адрес из юзерспейса в кернель? Не может быть такого, что именно в ядре не работает передача по адресу, это пиздец, там же адресное пространство линейное (инбифо PAE).
Вроде только с C++17 полностью, до этого как раз во вложенных нужно было class юзать.
Тьфу ты.
http://en.cppreference.com/w/cpp/keyword/typename
Внутри шаблонной декларации они являются полными синонимами.
key_input |= InputState::Left;
Конечно, такое я в жизни не напишу, поэтому скачал первую попавшуюся либу с гитхаба, всего то 400 строк кода, разве это цена для того, чтобы писать свой код коротко, красиво, молодежно? К тому же я надеюсь, что под капотом он раскрывается в зеро-оверхед.
Единственное неровное место, что либо надо помечать свой enum class макросом ALLOW_FLAGS_FOR_ENUM(MyEnum), от чего коробит, у нас же современные плюсы. Либо писать полную конструкцию
namespace flags { template <> struct is_flags<InputState> : std::true_type {}; }
От чего коробит еще больше. Скрипя сердцем, выбираю первое.
Впрочем, замечаю, что компилятору не нравится сама конструкция
key_input |= InputState::Right
Потому что, видите ли, у меня key_input типа InputState (enum), а результат операции |= какой-то другой. Очевидно там какой-то шаблон в неймспейсе, типа flags::flag<MyEnum>, который мне конечно же лень писать. Вспоминаю замечательное слово auto и обламываюсь, так как типы нестатических членов класса нельзя выводить, потому что какие то старперы мудаки не хотят приводить говнокод в порядок и такой вывод типа им все сломает. Но чу, вспоминаю, что где то читал про decltype, и действительно. Поприветствуйте самый отстойный говнокод, который я когда-либо писал в жизни, барабанная дробь:
class MyClass {
...
decltype(InputState::None | InputState::None) key_input;
}
Понял.
И что дальше?
#include <cstdint>
enum class Flags: int32_t { None=0, One=1, Two=2 };
int main() {
Flags f1 = Flags::None | Flags::One;
if (f1 & Flags::Two)
return 1;
return 0;
}
binary '|': 'Flags' does not define this operator or a conversion to a type acceptable to the predefined operator
binary '&': 'Flags' does not define this operator or a conversion to a type acceptable to the predefined operator
Кстати да, унаследуй енум от литерального типа
Haskell
С++
Держи браток, но я же все же на хаскеле ебнул.
[CODE]
char str = "VOLODIN DOLBIT NORMALNO";
char strs[3];
size_t lenght = 0, i = 0;
do{
if (str == ' ' || !str) {
strs = (char)malloc(sizeof(char)(lenght+1));
memcpy(strs, str-lenght, lenght);
strs[i++][lenght] = '\n';
lenght ^= lenght;
} else
++lenght;
} while(*str++);
[/CODE]
Ну например так
#include <string>
#include <vector>
#include <iostream>
int main() {
std::string str = "Bitard zhret govno";
std::string delimiters = " ";
std::vector<std::string> strings;
std::string::size_type lastPos = str.find_first_not_of(delimiters, 0);
std::string::size_type pos = str.find_first_of(delimiters, lastPos);
while (std::string::npos != pos || std::string::npos != lastPos)
{
strings.push_back(str.substr(lastPos, pos - lastPos));
lastPos = str.find_first_not_of(delimiters, pos);
pos = str.find_first_of(delimiters, lastPos);
}
for (auto &s : strings)
std::cout << s << std::endl;
}
Или взять boost. Или взять regex.
С бустом нормально, но хуй знает сколько это будет весить.
#include <boost/algorithm/string.hpp>
std::vector<std::string> strings;
boost::split(strings, "chitabelno pizdec pryamo", boost::is_any_of("\t "));
Блять и сколько эта херь памяти сожрет? Зачем динамический массив, если сказано что 3 строки? Биты в кудахдаре ограничены, зачем на такую простую задачу столько памяти?
Прости, в условии ничего не было про биты, если ты под МК пишешь на плюсах об этом надо заранее сообщать. Плюс, откуда мне знать, три там или не три. Анон написал "наверняка". И что у него за слова, 80 буков хватит всем? Кодировка? Так то можно и на C наебошить чтение по char.
Более того, в условиях ограниченной памяти, вообще не надо делить на слова. Надо хранить три пары указателей (начало/конец). Но опять же. Динамический массив, ебануться! Сколько он занимает, 16-32 байта оверхеда? Если там задача типа распарсить аргументы кокомандной строки или найти слова на сайте, зачем лишняя ебля?
3 СЛОВА
Меня интересует не то, что там лежит. Забыл я инициализировать указатель и при memcpy словил "Вызвано исключение по адресу 0x013A13E9 в SchnorrTestingEnvironment.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCDCDCDCD", и чё-т я задумался, проблема именно в том, что неинициализированный указатель может ссылаться на какой нибудь PAGE_EXECUTE_READ, в этот проблема?
>>1063928
Пока думал над твоим ответом, задумался, а во что компилируется this в функциях класса? при каждом вызове функций происходит неявный push адреса объекта класса? А по теме - мой неинициализированный указатель - не переменная, созданная в скоупе функции, а поле в структуре, которая в свою очередь поле в классе. Разве под него в стеке будет выделяться память?
>во что компилируется this в функциях класса
this - просто неявная переменная в всех функциях класса. При некоторых ошибках линковки, кажется, это явно можно увидеть.
>а поле в структуре, которая в свою очередь поле в классе.
Класс сам где располагается? В стеке? Значит, что было в стеке на месте, которое занял указатель, то в нём и будет лежать. В куче? То же самое, но в куче. Представь, как твой класс располагается в памяти, и ты всё поймёшь.
>0xCDCDCDCD
Некоторые компиляторы в дебаг-режиме заполняют выделенную память таким числом, чтобы легче было выявлять баги.
>в этот проблема?
Шанс того, что ты попадёшь на что-то осмысленное - почти нулевой. Хотя у меня был случай, когда указатель появлялся на месте ранее выделенного указателя, что затирало данные в другом конце проги. Поэтому используй умные указатели, где можно.
>this - просто неявная переменная в всех функциях класса. При некоторых ошибках линковки, кажется, это явно можно увидеть
Чтобы эта переменная указывала на класс, адрес должен быть передан. Метод - это такая же функция, как и все остальные, никаким магическим образом this он получить не может.
>>1063934
> в этот проблема
Проблема в том, что ты не понимаешь, что содержание неинициализированной памяти никак не определено, что не всё виртуальное пространство размечено, что программа может вести себя любым образом после использования неициализированной памяти по мириадам причин.
Название ошибки и то, как себя ведёт программа после ошибки,не имеет никакого отношения к C++ и называется undefined behaviour.
std::string s1, s2, s3, common("biba i boba");
std::stringstream ss(common);
ss >> s1 >> s2 >> s3;
std::cout << s1 << ' ' << s2 << ' ' << s3;
лол, и правда работает)
Попробуй написать что-то сложнее калькулятора.
Libtins - работа с сетью на разных уровнях, кроссплатформенная.
На хаскеле пиши, хули ты не модный такой? Кресты – это удел старперов и аутистов, который нахуй никому не сдастся через 3-5 лет
-b/2 умножить на а - это не то, что ты думаешь. Олсо D=0 - это тоже не то, о чём ты думаешь.
Не понимаю тебя. Вся суть плюсов в статической типизации и производительности. Тебе никогда не нужно иметь несколько функций вместо одной, тебе лучше иметь одну функцию пи передавать в неё this, иначе будет больше кеш миссов и бтб чаще не будет содержать инфу о нужном месте. Ты говоришь про эзотерические архитектуры ЦП, в которых есть абстракции?
Хотя, про "такая же" я зря сказал, я просто не в курсе того, какие могут быть отличия.
Что за форс Хаскеля? Это не модно совсем, ты бы еще Немерле форсил. Ладно бы Котлин, Свифт, Го, Раст в конце концов.
#ifdef EXTERNAL_ENGINE
extern "C" {
static struct ioengine_ops ioengine;
void get_ioengine(struct ioengine_ops ioengine_ptr){
*ioengine_ptr = &ioengine;
ioengine.name = "myaio";
ioengine.queue = myaio_queue;
ioengine.commit = myaio_commit;
...
};
#endif
Но при попытке использовать в какой-нибудь из этих функций метод класса из подключаемой к .so библиоетеке hpp либы всё обсирается.
Компилирую я всё это дерьмо с такими флагами
g++ -O2 -g -shared -fpermissive -rdynamic -fPIC -o suck_my_cock.o main.cpp -DEXTERNAL_ENGINE
Если не подключать hpp либу и не пытаться использовать методы из неё - всё нормально.
Причём компилятор жалуется на С-шные хедеры, мол:
../../fio/fio/minmax.h:5:19: error: expected unqualified-id before ‘{’ token
#define min(x,y) ({ \
^
../../fio/fio/minmax.h:5:19: error: expected ‘)’ before ‘{’ token
../../fio/fio/minmax.h:6:2: error: expected primary-expression before ‘typeof’
typeof(x) _x = (x); \
...
ну и всё в таком же стиле.
Как разрулить эту проблему, подскажите кто знает?
#ifdef EXTERNAL_ENGINE
extern "C" {
static struct ioengine_ops ioengine;
void get_ioengine(struct ioengine_ops ioengine_ptr){
*ioengine_ptr = &ioengine;
ioengine.name = "myaio";
ioengine.queue = myaio_queue;
ioengine.commit = myaio_commit;
...
};
#endif
Но при попытке использовать в какой-нибудь из этих функций метод класса из подключаемой к .so библиоетеке hpp либы всё обсирается.
Компилирую я всё это дерьмо с такими флагами
g++ -O2 -g -shared -fpermissive -rdynamic -fPIC -o suck_my_cock.o main.cpp -DEXTERNAL_ENGINE
Если не подключать hpp либу и не пытаться использовать методы из неё - всё нормально.
Причём компилятор жалуется на С-шные хедеры, мол:
../../fio/fio/minmax.h:5:19: error: expected unqualified-id before ‘{’ token
#define min(x,y) ({ \
^
../../fio/fio/minmax.h:5:19: error: expected ‘)’ before ‘{’ token
../../fio/fio/minmax.h:6:2: error: expected primary-expression before ‘typeof’
typeof(x) _x = (x); \
...
ну и всё в таком же стиле.
Как разрулить эту проблему, подскажите кто знает?
вот ты выкинул кусок кода и несвязанные с ним ошибки компилятора, просто очередной охуеть мамкин незнайка
Посмотри на вывод с флагом -E . Очень похоже на то, что препроцессор не отработал.
Скорее всего вызываешь что то C из C++ или наоборот. А если сам писал, то где то обращаешься к классу вместо переменной (Point.draw() вместо Point p; p.draw())
Как в gdb сделать шаг пока программа не работает?
>ПАЦАНЫ ВЫРУЧАЙТЕ
Вообще не понимаю как собирать Си библиотеки из исходников, объясните плиз.
Вот допустим, я скачал из интернета сходники библиотек ffmpeg и cURL.
Есть ОС Ubuntu и компилятор gcc, также установил cmake
раскупорил архив с ffmpeg и там много папок и файлов и как это все собирать ???
> Есть желающие написать на плюсах сетевые шашки за деньги? Телега @dudaevsky
Видишь файл configure в корне, как правило он используется для конфигурации перед сборкой. У него должны быть разрешения на выполнения (если их нет, добавь chmod-ом), потом запускаешь его с ключом --help и смотришь, что тебе предлагает configure. Многие проекты, как правило, ничего не требуют за исключением указания префикса установки (опция --prefix, указываешь ее на свое усмотрение, например --prefix=/ (самый хуевый вариант), --prefix=/usr/ (вариант по-лучше), будет указывать на место, куда будешь ставить либу со всем говном), после того, как ты сконфигурировал это дерьмо (если у тебя нет каких-то devel-пакетов, лучше бы тебе установить их, configure явно будет намекать на их отсутствие), запускаешь make лучше с аргументом -jx, где х - количество твоих ядер у пинцессора + 1, то есть для моего core i5 - make -j5.
Ждешь и наблюдаешь за процессом... И потом хуяк, все готово, вах вах. Но осталось только установить либу. Тебе поможет make install (если ты указал префикс, на запись которого ты прав не имеешь, то тебе придется запустить скрипт от рута, но тут уже ничего не поделать, маня)
Такие дела, если вкратце. Конечно, можешь прихуячить туда cflags, cxxflags, ldflags и прочее дерьмо, но тут ведь тебе только для себя же.
Алсо, аноны, проверьте правильные ли решения перегрузок у всех операторов, кому не сложно. А то я не ебу, но мне кажется что где-то есть кривой return. Заранее спасибо за помощь. Код ниже.
https://pastebin.com/pWUqnDyA
Сука, я уебище криворукое даже спустя 3 часа не заметил этого. Всех благ.
Слушай, анон, ещё такой вопрос: ты не знаешь, в моём коде реализация перегрузок везде правильная или где-то косяк в return? Спасибо.
Итак ньюфаг в треде.
Разумеется не так давно начал изучать С++, возник вопрос, собственно на счёт программирования на Linux, многих функций попросту нет, у некотороых есть аналоги но не у всех, как например реализовать ньюфане функцию _kbhit ? (из conio.h если что) И вообще как живется красноглазикам которые пишут на С++?
hello.s
https://ideone.com/hG5BP0
main.cpp
В main просто вызывается функция, определенная в hello.s
При сборке получаю ошибку: 1>hello.s(9): error A2006: undefined symbol : printf
Видимо, проблема в порядке обработки исходных файлов и генерации объектников, но я не уверен. Как указать в hello.s, откуда брать информацию о функции printf?
Спасибо за ответ. А как потом это все дерьмо линковать со своей прожкой. Например я сконфигурировал исходники и установил в --prefix=/usr/ там же вроде должны появиться готовые библиотеки формата lib_name.a , с которыми и нужно линковать свою программу, нет?
http://lmgtfy.com/?q=gdb+шаг
>>1064716
Ты на один шаг отдалил себя от получения проблемы, задав откровенно ненужный вопрос в начале поста и не написав ни одного сообщения об ошибке.
>>1065238
http://lmgtfy.com/?q=curses+kbhit+equivalent
>>1065391
>там же вроде должны появиться готовые библиотеки формата lib_name.a , с которыми и нужно линковать свою программу, нет?
После make install появятся.
Rust.
книгу
ncurses
Проект собираю под архитектуру x86_64, поэтому первые четыре аргумента в вызове функций передаются через регистры. Я настроил в свойствах asm-файла использование 64-битного masm, но после этого возникли ошибки:
1>switch.asm(1): error A2008: syntax error : .
1>switch.asm(2): error A2008: syntax error : .
1>switch.asm(9): error A2008: syntax error : pushad
1>switch.asm(10): error A2008: syntax error : pushfd
1>switch.asm(15): error A2008: syntax error : popfd
При использовании 32-битного masm их нет. Как исправить проблему? Юзаю VS2017.
Должны сами установиться по пути, который ты указал в --prefix, если не указывал, то наверно корень установки будет /usr или что-то такое. Так что в процессе линковки gcc, скорее всего, либу найдет.
Если ты собираешься дальше использовать CMake, тогда можешь воспользоваться pkg_config для поиска необходимых либ, например:
>> find_package(PkgConfig REQUIRED)
>> pkg_search_module(FFMPEG REQUIRED ffmpeg)
>> set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FFMPEG_C_FLAGS}")
>> set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FFMPEG_CXX_FLAGS}")
>> add_executable(sosach main.cxx)
>> target_link_libraries(sosach ${FFMPEG_LIBRARIES})
>> target_include_directories(sosach PRIVATE ${_INCLUDE_DIRS})
Еще есть такая штука, которая тоже много чего сделает для тебя, называется automake, но я не ебу, как ее использовать, лол. Да, впрочем, дохуя этих систем сборки, что уж.
Что нибудь такое? https://bitbucket.org/fudepan/mili/wiki/Properties
Или лучше такое
https://github.com/tower120/reactive
Найс, у плюсона порвало пердак. это не кормлене зеленого - я искренне поинтересовался, а ты меня нахуй послал - ну не пидор ли ты после этого?
> я искренне поинтересовался
Сам догадаться не можешь?
>ты меня нахуй послал - ну не пидор ли ты после этого?
Нет.
Потому что пайтон - скриптовый язык, и ты даже не будешь знать, что где то наебался, пока оно не упадет в рантайме.
То, что ты скачал библиотеку на пайтоне, вовсе не гарантирует, что она у тебя правильно скачалась и будет работать. А в плюсах если у тебя не собралась либа, ты знаешь что она не собралась.
>библиотеку на пайтоне, вовсе не гарантирует, что она у тебя правильно скачалась и будет работать.
скачать либу на пайтоне и проверить её работаспособность всё проще, чем скачать либу C++ и дождаться пока всё там скомпилируется.
так что такой себе аргумент.
Не траль плес
Да и ещё мне тяжко всю эту парашу воедино сводить. Солюшн, в нем проект, внутри проект, установить зависимости, компиляция по полчаса. И вот я спрашиваю - зачем это? В чем соль? Почему так, а не иначе? Но видимо разумисты-плюсаны только хейтить способны.
Ну это компилируемый язык который работает на процессоре
А, тебя никто разубеждать и не собирается.
Я как раз последние полгода плюсовые библиотеки разные пробую собирать. Обычно процесс выглядит так: скачал, кинул .h в папку с проектом, все работает. Чуть посложнее - скачал, кинул .h в папку с проектом, посмотрел в getting started какие #define нужны. Случай посложнее - скачал соответствующий Visual Studio project, поменял настройки в свойствах (static, MTd, вот это все). Самые сложные случаи - скачал либу, запустил cmake-gui, поставил галочки в тех опциях что заинтересовали, вписал пути к зависимостям которые не нашлись сами.
Вот это было неожиданно увидеть в конце самый лёгкий вариант в качестве самого сложного.
Никуда. Если либа header-only, то только .h. Если она билдится, то кидать я буду, естественно, .lib.
Мое субъективное мнение. В проектах для VS все опции стандартизированы и там сложнее перепутать. В cmake там скриптовый язык, который я еще не изучал, склонность автодетектить пути к зависимостям неправильно, потому что у меня например разные версии SDL под разные платформы имеются, опции на усмотрение автора либы.
Самое сложное это что-нибудь типа хромиума собрать, но у меня тупо места на диске нет (там 200 гигов вроде советуют иметь)
System requirements
A 64-bit Intel machine with at least 8GB of RAM. More than 16GB is highly recommended.
At least 100GB of free disk space.
https://chromium.googlesource.com/chromium/src/+/lkcr/docs/linux_build_instructions.md
В 2012 писали про 20GB на диске.
> Солюшн, в нем проект, внутри проект, установить зависимости
А, спермоблядь. Так бы и сказал. Впрочем, и так понятно, что у тебя нет пакетного менеджера.
О, ты удачно напомнил. Ведь под винду и студию как раз есть пакетный менеджер, и не один. Nuget в студии и OneGet в дриснятке. пользоваться ими я, конечно, не буду
>>1065624
С разморозкой. В VS2017 и clang уже есть модули из следующего стандарта.
https://schneide.wordpress.com/2017/07/09/c-modules-example/
>какой будущий стандарт?
С++20
>у VS они уже есть?
Как и у Clang. (gcc нинужно)
>Никому неизвестно что там будет и как они будут выглядеть
Только тебе неизвестно, всем уже известно, по ссылке код.
Ты наверное считаешь, что такой труп страуса сидит и придумывает, рисует в тетрадку, чтобы такого внести в стандарт. И тебе невдомек, что туда попадают уже готовые вещи, с прототипами, написанные майкрософтом и эпплом.
Ты спермой то ещё не захлебнулся там? Мамка отнимает?
>and the final standard is expected to be published before the end of the year.
>>1065642
>С++20
Это лишь догадки.
>Как и у Clang. (gcc нинужно)
Который отличается от VS, потому что стандарта, внимание, НЕТУ.
Бля, проигрываю с этих идиотов. Хотя бы нагуглили что-ли. И ещё копротивляются.
Хочу еще с него попроигрывать.
>Это лишь догадки.
Это уже факт, озвученный авторами языка. Нагуглишь сам, там дословно с++17 мы уже зафиксировали, теперь мы работаем над c++20.
>Который отличается
Это неважно. Одним словом отличается.
Имеет смысл изучить все передовое, чтобы потом не выглядеть как ты неандертальцем.
>Нагуглишь сам, там дословно с++17 мы уже зафиксировали, теперь мы работаем над c++20.
Я про то, что не факт, что модули будут в 20ой. В 17ом тоже говорили сделаем, но хуй там.
Хоть бы написал правильно.
Я сам хочу вкотится, так что правильного ответа не знаю. Вангую что язык (ну тут понятно), плюс предметная область - если высоконагруженные, то всякие многопоточности, базы данных, работа с памятью, если геймдев - 3d и движки, если микросхемы - оптимизации, тулчейны.
>в C++ вынужден ебать себя в рот в поисках как эту всю хуйню собрать?
В 99% случаев для собирания либы нужно просто сказать make. Ну, иногда конфиг поправить под себя.
Потому что легаси, потому что нативный код, потому что в комитете тормоза сидят.
>>1065597
>И вот я спрашиваю - зачем это?
Для перформанса (которого всё равно может не быть, если постараться и накорябать кучу копирований и коротких циклов).
>>1065598
1) Нахуй тебе динамически?
2) Нужно будет попердолить свои перегруженные операторы так, чтобы одна перегрузка принимала какой-нибудь THISTYPEISRETURNEDBYANOTHEROVERLOAD.
>>1065639
>С++17 до сих пор разрабатывается.
Финал драфт уже есть, его принимают сейчас.
Модули хотят в 20 припереть, вроде как, но это неточно. Даже не ебу, как они собрались это делать.
Идёшь в любую репу с активным автором (чтобы не ждать у моря погоды), открываешь список issues, находишь там то, что тебе интересно, и пишешь автору, что хочешь сделать (желательно - после того, как знаешь, что сможешь и сделаешь), во время этого поддерживаешь контакт.
>> Джва пропосала есть.
>> Вот когда будет десять, тогда и приходите. Нам этот ваш пропосал нахуй не нужон
>Финал драфт уже есть, его принимают сейчас.
>его принимают сейчас
https://herbsutter.com/2017/09/06/c17-is-formally-approved/
> 2017/09/06
> его принимают сейчас
> 2017/09/06
>and since then we have been in the final procedural endgame of formal ISO approval and publication.
Это про митинг с 27 февраля по 4 марта. Since 4 марта и до 6 сентября они были in the final procedural endgame of formal ISO approval and publication.
https://pastebin.com/iFMT3Tyi
Отмена реквеста, в LockServer надо было параметр BOOL, а не bool ставить.
А, точно, жопой читал.
С помощью компилятора - никак. С помощью плюсов: находишь системные вызовы для этого или либы или используешь CLI-программы, встроенные в ОС.
Сейчас я на РАБотку подъеду и спрошу, у меня там код. Что конкретно ты делал на CUDA? Насколько знаком с cusolver и cublas, нужно будет быстро хуярить, если что.
> Что конкретно ты делал на CUDA?
Решатели для конечных элементов. С библиотеками, без библиотек... Делал свой MPI-CUDA решатель для кластера, например.
> Насколько знаком с cusolver и cublas
С первым не работал (работал с cusparse), со вторым – работал. Вообще опыт гомоебли с математическими библиотеками немаленький, если задача нормально поставлена будет, заведу быстро почти что угодно.
bool b=std::operator<(x,y);
Где x и y - числового типа.
Но конпелятор отказывается конпелировать, говорит, что можно сравнивать только две std::pair, либо два std::errorcode либо ещё что-то, но про числа ничего нет. ЧЯДНТ?
Числа не являются классами, это примитивные типы для них такой оператор нигде не определён.
std::string с reserve(100) не копирует же данные в другое место, пока изменения в строке не приводя тк увеличению ее длинны на более 100 символов?
fatal error: 'evhttp.h' file not found
ШО ДЕЛАТИ? ГДЕ ЕЁ ИСКАТИ? ВСЕ ОБЫСКАЛ – НЕТ НИГДЕ
не копирует во время reserve, или после?
http://eel.is/c++draft/basic.string#string.require-4
Никаких гарантий относительно reserve в стандарте нет.
>>1066779
Только через компиляторозависимые расширения языка.
>>1066806
operator< - это конкретно для вызова и определения перегрузок. Для всего остального есть std::less (используется в качестве сравнителя по умолчанию во многих шаблонах).
> Однако при разработке стандарта было допущено небольшое упущение — шаблонный вариант пользовательского литерала позволяет работать только с числовыми аргументами, несмотря на то, что парсинг их осуществляется посимвольно.
> Такое упущение, конечно же, не могло остаться не замеченным, и на этапе согласования стандарта C++14 было предложено решение для строковых аргументов
> Однако в финальную редакцию стандарта C++14 так и не попало. Впрочем, не будем отчаиваться, есть надежда, что нас обрадует C++17.
По хорошему С++ уже давно пора хоронить и порядочные люди так бы и сделали. Будь страус человеком встал бы и сказал: нагородили говна и запутались в нем. закрываем нахуй.
Но нет до последнего будут обмазыватся несвежим говном которое наложили еще два полудебила керниган-ричи.
https://pastebin.com/Tr71CB2U
Я вот такой курс проходил, там правда иногда ебанутые задания на матешу попадаются.
https://stepik.org/course/363/
Всмысле, чтобы враппать эти шаблоны, и их в интерфейсе вообще не было.
Ну, блин, без дополнительного класса-враппера, используя только один класс?
Всмысле, мне нужно, чтобы был шаблонный мембер-вектор с компайл-тайм содержимым, не делая при этом сам класс шаблонным. Я даже не знаю как правильно такой враппер написать.
Итак, ты хочешь, чтобы один и тот же тип имел разное внутреннее представление. Ты здоров?
Без наследования никак
для таких даунов, как ты, все либы уже собраны и аккуратно положены в репу. тебе всего лишь надо сделать:
apt install libname-dev
apt install libcurl4-gnutls-dev или же libcurl4-openssl-dev (разница лишь в либе для шифрования, как видишь)
apt install ffmpeg
Иногда мне кажется, что сбор либ, конфигурация и настройка на винде требует куда большего скилла чем на никсе.
ещё в 15-ю визуалку подвезли пакетный менеджер специально для плюсов (не нюгет, а другой -- соснольный). и курл там точно есть
быстрофикс: это и есть нюгет, токмо соснольный интерфейс https://www.nuget.org/packages/curl/
Вектор с вариантом - это пиздец, хачем так делать? Вариант векторов.
Да ничего, заодно матешу поупражняю. Спасибо.
Именно так. А все потому открытые библиотеки на юниксах и разрабатывают.
>>1067850
Nuget это конечно мило, но гвоздями прибито к Visual Studio и Windows. В одном проекте сейчас переходим на Conan. Вполне юзабельно. Разве что на текущий момент оперативно не переключишь вариант сборки (Debug\Release, x64\x86).
Эти библиотеки навязывают свой стиль программирования и не учитывают то, что программист привык писать по-другому.
Только такие знаю
[CODE]//decl.h
class SomeClass; //forward declaration (1)
class UsingClass { //declaration (2)
int do(SomeClass); //declaration, using (1)
};
class SomeClass { //declaration
public: float f;
}
//decl.cpp
#include "decl.h"
int UsingClass::do(SomeClass sc) { //definition (3)
return (int)(sc+0.1f) ;
}[/CODE]
Пиши свою обёртку к GTK под свои утиные запросы.
Тебе вряд ли это понравится.
1. Встраивают хром или другой рендер HTML (Sciter)
2. .NET и WPF
3. Берут что то из этого списка https://github.com/fffaraz/awesome-cpp#gui
(CEGUI, Dear IMGUI, nana) или вообще какую то еболу типа Ultimate++.
>Эти библиотеки навязывают свой стиль программирования
Лол кек. Фреймворк — это практически по определению наличие инверсии зависимостей. Так что да, ты будешь писать в стиле, нужном этим библиотекам. В этом смысл инверсии зависимостей.
Сейчас бы в 2к17 путать библиотеки, которые дергаешь ты, с фреймворками, которые app.run() и дергают тебя.
В интернетах вроде советуют использовать QSortFilterProxyModel, но я нубоват и не могу понять, что оно делает. Оно позволит мне наложить фильтр на имеющуюся модель так, чтобы в нее не вошла часть строк, и потом отсортировать стандартным образом? Но тогда не скроются ли непрошедшие фильтр строки из таблицы? Мне нужно их оставить на местах.
пик анрилейтед, найден по запросу qt-chan
Можно ли аккуратно std::move'нуть ( или скопировать ) его в вектор, если N кратно размеру темплейта?
>>1068268
Если не ошибаюсь, ничего специфического в этом нет.
Пусть тебе нужно сортировать выделенные элементы по нажатию ctrl+t.
Пишешь обработчик ивента, по нажатию ctrl+t идешь смотреть какие строчки в таблице выделены и сортируешь их любым известным методом.
1) Делаешь resize старого.
2) Копируешь в .data().
1) http://en.cppreference.com/w/cpp/container/vector/assign вторая перегрузка принимает в том числе указатели.
Нет никаких причин для того, чтобы не заменить динамически выделенный кусок на вектор, так как есть data(). инбифо древние плюсы
Я думаю быстрей свою библиотеку написать на чистом WinAPI, чем годами наворачивать чьё-то говно, которое в конце концов ещё окажется ещё и не работоспособным.
изобретатель велосипедов
Как сделать, чтобы можно было легкор проверять, задана она или нет?
struct data_s {
int i;
double d;
}
class Jopa {
public:
struct data_s s1 = {0};
struct data_s s2 = {0};
}
....
if ( jopa_inst.s1 != {0} ) {
jopa_inst.s1 = { 126, 2.0 };
}
Так?
Если тебе нужно сортировать данные модели то тебе нужно унаследоваться от QSortFilterProxyModel и перекрыть там методы filterAcceptsRow и filterAcceptsColumn которые будут пропускать строки и столбцы по заданному условию. Для изменения порядка элементов нужно перекрывать соответсвующий метод. Это нужно потому что элементы модели прикреплены к ней намертво и в другую модель их нельзя передать даже по указателю, поэтому нужна прокси модель, которая будет пропускать и сортировать элементы уже имеющуюся модели для конкретного представления.
Создай константный глобальный нул элемент этой структуры и присваивай его по-умолчанию, а потом сравнивай с ней же.
const data_s null_data_s = new data_s{0, 0.f};
class Jopa {
public:
struct data_s s1 = null_data_s;
struct data_s s2 = null_data_s;
}
if ( jopa_inst.s1 != null_data_s ) {
}
Звездочки - это классно.
А если у меня структура на 20 значений, проще нельзя сделать? Все uint16-32
Тогда в структуре сделай булево поле которое будет показывать проинициализована структура или нет.
>Я думаю быстрей свою библиотеку написать на чистом WinAPI
Напиши и покажи, как она работает. Предчувствую, что на ВинАПИ ты не писал, если ты так говоришь.
Я раньше писал на WinAPI, даже лабы в универе делал на нём, когда все писали их на Borland C++ под MS-DOS. Поэтому у меня по ЯТП были всегда пятёрки.
Буду потихоньку писать свою библиотеку. Может её сделать платной? Некоторые скажут, что я наживаюсь на их несчастье. Но что я ещё могу делать!? Я умею только программировать.
Искренне не понимаю чем вас qt/wx не устравивет. Есть чтро предложить для запила/ исправить - ебаш коммит
Не устраивает, что хочу использовать Qt как молоток, а он ведет себя как большой резиновый член, который так и норовит залезть мне в жопу. Это касается и Qt как библиотеки, так и Qt creator'а как IDE. Особенно в QML, это просто пиздец. IDE крашится блять не успеваешь даже строчку дописать.
Qt многих не устраивает тем, что это уже не c++, а своя экосистема, сигналы, слоты, строки, вот это все придется тоже тащить.
Так как раз не я, а Qt застрял, это в 2003 писали всякие самопальные обертки на строки, потоки, вот это все.
char[] -_-
Сап, плюсач.
Пытаюсь в плюсы.
Не получается сделать запрос с помощью boost:asio.
https://gist.github.com/spudro228/6732af3d261000643ed15c6733fcf2c2
Как сделоть HTTPS запрос?
Для https нужен ssl-сокет. В Boost::ASIO он есть. И да, подключаться нужно на порт 443, а не 80.
Что бы не тащить все символы из std в текущее пространство имен. Это точно не стоит делать в заголовочных файлах, ибо не ясно куда они потом будут подключатся и когда возникнет конфликт имен.
>
>По хорошему С++ уже давно пора хоронить и порядочные люди так бы и сделали. Будь страус человеком встал бы и сказал: нагородили говна и запутались в нем. закрываем нахуй.
>
>Но нет до последнего будут обмазыватся несвежим говном которое наложили еще два полудебила керниган-ричи.
Поддвачну.
Нельзя пофиксить кресты сохраняя обратную совместимость.
А если не сохранять, то это уже и не кресты.
Тол-же касается джавы кстати, и прости господи, JS.
Самое время на раст перекатываться.
target_link_libraries(project ${Boost_LIBRARIES} boost_system boost_filesystem boost_thread )
Это не мои исходники. Я вообще не C++ программист. Мне просто надо собрать эту хуйню, потому что собранной нет.
А тебе нахуй оно тогда, если ты не программист, или в комплекте программ скупе, аваст, Paint.NET еще и Boost идет?!
Ок, ладно. Все равно нихуя не пойму. Короче, не знаю, прокатит ли:
тыкаешь `Add entry` указываешь в название поля BOOST_ROOT, а в качестве значения путь к папке, куда ты распаковал Boost, у тебя вроде как `c:/local/boost_1_65_1/`.
После этого `configure`, затем `generate` и вроде как все. Но это не точно. Я с буста только препроцессор использовал, а он header-only.
Не работает BOOST_ROOT, BOOST_LIBRARYDIR.
Записываю данные в две переменные:
String ^text = textBox1->Text;
String ^text2 = textBox2->Text;
но не могу понять, как в Message->Body засунуть обе из них, а в идеале еще и на разных строках с подписями.
Я полный ньюфаг и первый раз делаю что-нибудь вне консоли, так что не обоссывайте сильно
Эй дружок-пирожок, тобой выбран не правильный тред – С#-тред двумя страницами ниже.
В хелло ворлд, это конечно неочевидно.
А когда у тебя большой легаси проект в котором есть 100500 самописных string - станет понятно.
Но я так понял, что он нахуй не нужен и с++ перспективнее
Если я буду учить с++ сам, я осилю просто с?
Осилишь.
Но у С есть ниша - микроконтроллеры. И это не только хипстерские ардуино, но и контроллеры котлов на заводиках, например. Космические аппараты вроде тоже только на С можно программировать (MISRA C)
Ну я первц семестр по С сдал, а второй нет.
Я думал он мертвый вообще. А какой сложнее считается?
Мало памяти - нельзя выделять динамически, низкая скорость проца, реалтайм - нельзя исключения, сами алгоритмы простые - от системы классов и наследования нет плюшек. Проще написать на "высокоуровневом ассемблере", чем гадать, во что раскроется очередной шаблон, если поменять какой то параметр.
Нет, формально, он пишет по теме. c++ winforms на CLI действительно существовали до 2013 года.
но охватывающая большую часть множества языка? "Язык программирования С++" Страуструпа? Книги он пишет лучше, чем языки?
Плюсы, как язык, сложнее, чем С, так как база терминов разбухла в разы. Просто на С ты будешь писать ручками многое из того, что в С++ сделано авторами STL и авторами компилятора. Если ты вместо С будешь практиковать С++, некоторый пробел в твоей практике будет.
Олсо, с некоторых пор С не совместим с С++. У С тоже есть новые стандарты (но я почти уверен в том, что у тебя про них ни слова не спросят).
>Олсо, с некоторых пор С не совместим с С++.
Ну, то есть, компилятор тебе на почти все проблемы укажет.
Плюсы — это плюсы.
Дотнет — это дотнет со своими языками. И этот маркетинговый кастран — не плюсы.
C++/CLI - это расширения стандартного языка C++. Не веришь мне - сам Страуструп так пишет. http://www.stroustrup.com/bs_faq.html#CppCLI
Тебя же не смущают расширения c++, скажем, используемые в gcc?
Ага, пишет, и вежливо поливает говном с конца первого абзаца.
Я тебе повторюсь — это такое же ответвление от плюсов, как плюсы от си (и труп страуса об этом там же пишет, почитай).
>C++/CLI - это расширения стандартного языка C++.
Я всегда использовал лишь как прослойку между managed и native частями приложения. Это и не полноценные плюсы, и не полноценные шарпы. 11 и далее стандарты там в принципе не завезены. Чем меньше C++/CLI, тем лучше.
мимопроходил
Магия какая то
Какое?
Ну у тебя тип внешний цикл это каждая нечетная строчка.
Внутренний это символы на каждой строчке.
Никакой магии. сначала по коду проходится транслятор, который расхуяривает весь твой ООП, лямбды и прочее на элементарные единицы, а потом уже им ставит взаимное соответствие со всякими B8 00 00 00.
int arr[] = {1, 6, 2, 2, 7, 7, 3, 3, 3, 8, 8, 8, 4, 4, 4, 4, 9, 9, 9, 9};
for (size_t i(0), k(1); i < sizeof(arr)/sizeof(int); ++i) {
std::cout << arr << ' ';
if (i+1 == static_cast<size_t>((1.f/8.f)(2kk + 4k + pow(-1, 2*k) + pow(-1, k+1)))) {
++k;
std::cout << std::endl;
}
while(false) ; //вложенные циклы
while(false) ; //вложенные циклы
while(false) ; //вложенные циклы
}
Стоит ли вкатываться на андроид через Qt, или лучше смотреть в сторону android studio и java? Определяющим критерием для меня является: предоставляет ли Qt возможности вертеть ОС мобилы как мне нужно, ну или хотя бы настолько же, как мне это позволяет java framework'и в том же AS?
Лучше выучи Objective-C и ебаш под гейос, если кресты и qt знаешь то на это уйдет неделя.
Кресты знаю так себе, в свободное от работы время пытаюсь въехать в Qt, а тут еще и параллельно лабы в универе с мобильными приложениями точнее, именно android, а тут как раз Qt предлагает свой фреймворк для этого. Не хочу просто еще на java и AS садиться, но если Qt не позволит, например, взаимодействовать с ФС телефона/другими приложениями/функциями ОС, а AS позволяет, то придется присесть на джаву.
Без багов на каждом уровне никуда, багтрекер своего компилятора сам найди.
> плюсы -> жс
Что же ты делаешь.
Если душа лежит - конечно попробуй. Сложно будет разве что с тем, чтобы разобраться во всем js-зоопарке, и писать красиво на языке, который всеми силами поощряет говнокод.
PHP
Давай в макдак работать пиздуй.
Ты ещё C++ не выучил
Классическая пулемётная очередь в ногу из верёвки. Мир тебе прахом, братишка.
Ниоткуда. Это перевод на мясной язык для человеков.
Я вкатывался на скотте мейерсе "Эффективный и современный С++". Прихуел, конечно, знатно... Забавно то, что потом пришлось читать cppreference, чтобы восполнять знания. Лучше бы книгу по крестам прочел )
Как считать из файла в дабл, если числа в файле отделены пробелами
5 4,124 -1000
Причем хотелось бы выполнение двух пунктов.
Не использовать библиотеки из плюсов, типа stdio.h
Возможно, что файл закончился или написано не число.
Раньше я для этого через фстрим делал гетлайн, а потом преобразовывал в инт, но теперь у меня дабл и возможное отсутствие атои аналога в библиотеке. Самому писать функцию для перевода лень, программа то мизерная.
По такой логике тебе после прохождения, например, курса грамматики английского языка словарь должен быть не нужен, ну ахуеть теперь.
Цель учебников — дать тебе основу, с которой ты сам уже сможешь развиваться дальше, вот и всё.
Я к примеру вот так написал программу
https://pastebin.com/NQrXtFcG
На внутреннюю логику не смотрите, я в функции считываю из файла, как из потока. Однако это все не компилируется, хотя я вроде подключил все библиотеки. Мне кажется дело в команде
using namespace std;
Но если ее разнести из ашника, то не видит стринг в ашнике, а если вместо стринга написать std::string, то не компилируется как обычно с непонятными ошибками.
Не понял. Мне просто не хочется использовать эти либы, потому что не комильфо. Что не так?
Ну она вроде как работает и на плюсах. В любом случае я говорю, что не хочу ее использовать.
Я бы как то так делал.
#include <string>
#include <filesystem>
#include <fstream>
#include <sstream>
#include <iostream>
#include <clocale>
namespace fs {
using path = std::experimental::filesystem::path; //или уже без experimental?
}
int main() {
std::locale::global(std::locale("Russian")); //чтобы не превращать вещественные запятые в точки
std::cout.imbue(std::locale("Russian"));
std::stringstream s_stream;
{
std::ifstream in_stream{ fs::path{ "C:/Work/test.txt" } };
s_stream << in_stream.rdbuf();
}
float a, b, c;
s_stream >> a >> b >> c;
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
return 0;
}
Я бы как то так делал.
#include <string>
#include <filesystem>
#include <fstream>
#include <sstream>
#include <iostream>
#include <clocale>
namespace fs {
using path = std::experimental::filesystem::path; //или уже без experimental?
}
int main() {
std::locale::global(std::locale("Russian")); //чтобы не превращать вещественные запятые в точки
std::cout.imbue(std::locale("Russian"));
std::stringstream s_stream;
{
std::ifstream in_stream{ fs::path{ "C:/Work/test.txt" } };
s_stream << in_stream.rdbuf();
}
float a, b, c;
s_stream >> a >> b >> c;
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
return 0;
}
Шо там у тебя за непонятные ашипки?
Все компилируется, что с using namespace std, что без (только без еще надо std::cout писать)
Раньше все работало жи, я с компилятором ниче не делал. Что-то похерило мне либы? Как чинить на линупсе?
Ня, ровно год назад я наступал на те же грабли и меня ткнули в мое же говно. Мне кажется я необучаемый. Спасибо.
Спасибо анон, хоть у меня и линупс, да и сложно как-то все.
>Мне надо самому писать класс для каждого виджета и вручную связывать класс и виджет
ето, я пеинт делал через QGraphicsScene
Суть в чем - вывод аудио не через файл, а через прямое байтоебство (в примере синусоида).
Для этого наследуются от QIODevice и оверрайдят read() ( и write() пустой функцией). После этого передают унаследованное в QAudioOutput (QAO).
В примере так: Берется здоровый буффер, туда синусодидой вычисляется хуева куча сэмплов, после этого по нажатию ВКЛ буффер начинается считывать данные, к примеру QAO просит 16к байт, функция read() записывает эти 16к байт по переданному поинтеру, делают сдвиг 16к (тобишь в следующий раз скопируют следующие и так далее до ахуения, бесконечный луп выходит). Контроль этим цирком присходит через start() и stop(). Все работает.
Я сделал одно отличие - я хочу, чтобы после того, как проигрались все сэмплы QAD останавливался сам (без лупа). Отпрвляю сигнал в отдельный класс для врапа всего этого, он делает QAudioOutput::stop(), все стопается после этого крэш. Также я пробовал делать стоп не тогда, когда буффер кончится, а после 10 итераций - все равно крэшит. Самое интересное, что если делать аналогичный стоп через ГУИшку все работает нормально.
https://doc.qt.io/qt-5/qtmultimedia-multimedia-audiooutput-example.html
Запили отдельный, как раньше, хули
>как я дальше вообще связываюсь с ним в коде?
в контексте своего окна:
this->ui->myQGraphicScene->...
указатели на все виджеты (их компоновка вроде тоже) лежат в объекте ui.
Ну я о том же и говорю.
>я пеинт делал через QGraphicsScene
Лошара, я через QPainter виджеты рисую это не шутка, кстати.
To give you the essential feeling, the following example is provided.
(defun isomorphic (tree1 tree2)
(cond ((atom tree1) (atom tree2))
((atom tree2) NIL)
(t (and (isomorphic (car tree1)
(car tree2))
(isomorphic (cdr tree1)
(cdr tree2))
))))
Just a Lisp function, isn't it? Now look at the following code:
(L|DEFUN, ISOMORPHIC, (L|TREE1, TREE2),
(L|COND,
(L|(L|ATOM, TREE1), (L|ATOM, TREE2)),
(L|(L|ATOM, TREE2), NIL),
(L|T, (L|AND,
(L|ISOMORPHIC, (L|CAR, TREE1),
(L|CAR, TREE2)),
(L|ISOMORPHIC, (L|CDR, TREE1),
(L|CDR, TREE2))
))))
Obviously the code is just the same, the syntax changed a bit, but it's still the same. Well, do I surprise you if I say it is C++ code? If you don't believe, look at the following:
To give you the essential feeling, the following example is provided.
(defun isomorphic (tree1 tree2)
(cond ((atom tree1) (atom tree2))
((atom tree2) NIL)
(t (and (isomorphic (car tree1)
(car tree2))
(isomorphic (cdr tree1)
(cdr tree2))
))))
Just a Lisp function, isn't it? Now look at the following code:
(L|DEFUN, ISOMORPHIC, (L|TREE1, TREE2),
(L|COND,
(L|(L|ATOM, TREE1), (L|ATOM, TREE2)),
(L|(L|ATOM, TREE2), NIL),
(L|T, (L|AND,
(L|ISOMORPHIC, (L|CAR, TREE1),
(L|CAR, TREE2)),
(L|ISOMORPHIC, (L|CDR, TREE1),
(L|CDR, TREE2))
))))
Obviously the code is just the same, the syntax changed a bit, but it's still the same. Well, do I surprise you if I say it is C++ code? If you don't believe, look at the following:
Мне было бы очень влом реализовывать сцену с нуля. Алсо, какой тогда смысл использовать Qt
Я просто отрисовку с OpenGL переносил, написал обертку небольшую вокруг QPainter. В результате получилось проще и удобнее, чем обычно с кьютовой сценой бывает - почему то никогда задача ровно на их граф не ложится, приходится костылить. Теперь так всегда и делаю для простого интерактива.
Зато ебсти себя в жепу связывая очень хуево связываемые вещи ни в каком плане не говно план, да? Ещё и вендорлок на продукты компании, убивающей свои проекты ежегодно.
Собираю из исходников .so библиотеку ./configure with ssl, в итоге получается 3 .so файла libcurl.so, libcurl.so.4, libcurl.so.4.4.0
Итак:
1) если мне нужно использовать в проекте эту шаред библиотеку курла, то необходимо рядом со своей программой ложить все 3 .so библиотеки или нужна только одна? (Какая?)
2) на двух .so файлах нарисована стрелочка(такая типо ярлыка), зачем?
3) каждый из этих .so файлов весит примерно по 500kb, так и должно и столько всего весит вся cURL?
После того, как я осмотрелся в виджетах и quick controls 2, я просто охуел от того, как глубоко нужно засунуть себе хуй в сраку, чтобы добиться того, что на WPF делается за пару минут, и потерял все надежды на нормальный GUI где либо, кроме как на WPF. Это выбор между пиками и хуями, я согласен, но оба стула прикручены к полу, так что я выбираю пики.
>зачем
Вероятно, для версионирования, если какой-то проге надо вот именно до зарезу версия 4.0, а не 3.9
1. Можешь положить к себе, но, на самом деле, лучше make install въебать. Если не хочется, чтобы было конфликтов и смеющимися библиотеками, то во время того, как выполнял ./configure нужно указать --prefix куда все девать. Если префикс нестандартный (то есть не / или /usr), тогда добавляешь в переменную окружения LD_LIBRARY_PATH путь к либам (например /usr/devel/lib), либо настраиваешь ld.so.conf
2. Это символические ссылки, скорее всего.
3. Некоторые либы и мегабайтами весят (Qt не в счет), там, наверно, большое количества строк. Можешь очистить директорию сборки и перед выполнением configure задать переменную окружения CFLAGS="-g0 -O2", тогда их вполне может пожать
Вообще, нахуй ты взялся собирать CURL, если любой нормальный реп уже содержит его devel-версию?!
Любой нормальный прод фиксирует версии своих зависимостей и приходится руками собирать нужные версии
другой анон
Ну это тоже верно. Я имею в виду, что он делает для себя, так что вот такая еботня избыточна.
>осилю ли 1 этот язык?
На уровне "сделаю с гуглом и стаковерфлоу" осилишь точно, а вот дальше могут быть проблемы. В языке огромное количество премудростей, отнюдь не улучшающих читаемость. C++ - это река с дном, выложенным скалами. Бери книгу из шапки и читай.
Спасибо за ответ
Учи джаву лучше. Язык проще, вакансий больше, карьера быстрее двигается.
Это и есть утечка памяти вульгарис
помогите анОнасы, как задать (k^2)!, т.е факториал квадрата.
Если ты создаешь переменную в куче и не высвобождаешь память, то память висит до конца работы программы.
Причем, если ты локально выделил память, то после завершения работы функции/блока, ты еще и потеряешь указатель, так как последний будешь высвобожден из памяти как автоматическая переменная с локальной областью видимости.
Варианты решения:
1. Использовать такие объекты как умные указатели, деструктор зашит уже внутри.
2. Более народный вариант и экономный по памяти, передаешь в функцию ссылку на указатель, которому через new выделяешь память память
n!
for(int i = 1;i<=n;i++)
result = resulti;
(n^2)!
for(int i = 1;i<=n^2;i++)
result = resulti;
Спасибо Анонче.
Удаваиваю
>2к17
>C++
>free/delete
/0
Страуструп как толкал 40 лет RAII, так даже ебучий unique_ptr протолкнуть не может.
Читаю, спасибо.
На работе видел как то .h файл, который занимается примерно тем же, переопределяет new/delete и записывает в вектор выделения памяти, но я не понял насколько он кроссплатформенный.
>На работе видел как то .h файл, который занимается примерно тем же
Свой велосипедный анализатор памяти наверное в каждой второй конторе есть.
Битовая операция XOR (исключающее или). Операции возведения в степень в c-подобных языках нет, это реализуется библиотечной функцией pow() из math.h
А это, ну конечно, ты прав,естественно я имел в виду под n^2 = n*n.
А в валгринде дофига не С++? Все же тут дело видимо в том, что всюду дергаются какие то системные вызовы, используется какое то знание о том, как система выделяет память.
Пердачую.
Иди макросы проверь, у тебя где то тип проебался.
Opengl.
Заценил, живенько вбросил.
Сорри неправильно распарсил аналог чего чему нужен. Под виндой https://msdn.microsoft.com/en-us/library/e73x0s4b(v=vs.90).aspx
Уныло, убого, нечитабельно. Какой код писать, ты даже мысли свои компактно и вменяемо изложить не можешь.
Да не, к середине уже заебался читать.
Слишком графоманский стиль.
*this
У Торвальдса лучше получается. А у Эктона еще круче:
https://macton.smugmug.com/Other/2008-07-15-by-Eye-Fi/n-xmKDH/gallery/8936708_T6zQX/i-BrHWXdJ
ЯННП, что он предлагает то, выкинуть все ООП и писать циклами по массивам? Хотя это 2008, думаю если сейчас выкинуть виртуал, все остальное компилятор соптимизирует лучше, чем писать ручками.
>выкинуть все ООП и писать циклами по массивам?
Во многих случаях так получается более быстрый и читаемый код.
Нахрена лепить virtual, если у тебя всего 3 вида коллайдеров, они известны заранее, и больше их точно не добавится?
>Это миф.
Ты правда считаешь, что виртуальный вызов бесплатный?
>Это попросту неправда
Правда. Более читаемо, чем is_sphere_in_frustum( sphere, frustum ) ты вряд ли напишешь. Код без абстракций проще для понимания, чем код с абстракциями хотя бы потому, что тебе абстракции в голове не надо держать.
>А у Эктона еще круче
Тащем та, краткая суть его слайдов - "При специфических условиях, стандартная реализация ООП сосет по скорости"
Конкретно условия:
- Объектов много, если бы было мало отставание стандартной реализации было бы незаметно
- Операции над объектом легкие/простые. Были бы сложные ( ну там выделение памяти и т.п.) - было бы незаметно по сравнению с virtual
- Критично по производительности
Всем нормальным разработчикам, это давно было очевидно, ни откровением, ни критикой ООП оно не является.
А то, что на одно такое место в типичной прогремма будет 100 и более некритичных мест, где можно использовать virtual ты скромно не фокусируешь акцент. Интересно почему?
Все картинки про узкие места в коде, который будет часто исполняться. Если читаемость кода приведёт к его замедлению, можно и пожертвовать частью ООПа.
>Интересно почему?
Потому что в типичном ООП-коде никто не смотрит на узкие места, а сразу хуячат какой-нибудь универсальный AnimalBase, который дальше через виртуальные методы хрюкает, мяукает, выделяет память, рисует виджеты и управляет атомным реактором.
В том то и дело, что на каждой конференции по С++ твердят - проверяйте профайлерами, то что вы считали узким местом дало 0,001% производительности, ради этого не имеет смысла писать С-функции на 1000 строк и отказываться от архитектуры.
И? В 99 случаях из ста оно будет работать удовлетворительно. А то что в одном специальном случае оно не работает - ну так никто ничего не обещал, головой надо было думать.
>Видишь, написал
Только на практике это будет что-то вроде current_camera.contains( spaceship ). И чтобы понять, что "contains" в данном случае означает пересечение фрустума со сферой, тебе придется попрыгать по файлам.
>В 99 случаях из ста оно будет работать удовлетворительно.
Проблема в том, что когда тебе понадобится скорость, узким местом окажется вся программа целиком, и чтобы оптимизировать придется переписывать все целиком. Плюс в классическом ООП очень сложно изменить программу, и добавить функционал, не предусмотренный на старте.
>А у тебя, в таком случае, будет is_sphere_in_frustum(cube, cloud)
Ну это понятнее, чем contains. Тут проблема только в том, чтобы выяснить где фрустум, а где сфера.
А поскольку объедков у нас нет, то это все int handle и прыганье по файлам превращается в боль.
На таком примере виртального вызова по стандарту не должно быть, хоть в 2007, хоть 1998.
Вытекаешь из треда.
На случай, если ты не зеленый:
Наоборот, профайлером смотришь в какой функции программа проводить 90%+ времени. Ее и оптимизируешь. Повторить пока не надоест.
И нет, в классическом ООП намного проще добавить функционал, просто описав новые свойства объектов и связи между несколькими объектами, чем пытаться разобраться в мешанине оптимизированного кода на Си, манглирующего битами.
>то это все int handle
Ну если ты типизацию выкинул, то ты сам себе дурак, не важно с ООП или без.
>Наоборот, профайлером смотришь в какой функции программа проводить 90%+ времени.
Это ты на свинге в джаве не писал приложений. Он тормозной необратимо. Весь целиком, без узких мест. И новый функционал в большинстве случаев там можно добавить, только переписав виджет с нуля.
Конечно, не писал, т.к. тогда когда он появился, про него сразу везде писали, что он тормозной, а в джаве не было JIT.
>про него сразу везде писали, что он тормозной
Он и сейчас с JIT тормозной, и с AOT будет тормозной, потому что там неизлечимое ООП головного мозга. В Qt чуть получше со скоростью, но и там штаны через голову приходится надевать регулярно, когда от базового функционала хочешь на шаг отойти.
Спешите видеть! Битва "X is in Y" против "Y contains X" в цпптреде!
NAMED ARGUMENTS!!!
Да, признаю, тут обосрался, если ввести указатель то уже не оптимизирует.
Впрочем виртуальный вызов скорее всего не сильно дороже if по типу окажется.
define не сильно дороже. Компилятору приходится впиливать общий для всех классов в код в каждый виртуальный вызов, он не может использовать более простой код специально для этого дерева наследования.
Сейчас у меня godbolt не грузится, завтра проверю.
есть функция, которая читает строку (до табуляции) из файла, заносит её в поле структуры и выводит на экран
void read_File()
{
ifstream fin("networkinfo.txt");
netInfo C;
fin.getline(C.Name,'\t');
fin.close();
cout << C.Name << endl;
}
Собственно, почему считывается только первые 8 символов? Ведь должно же читаться до первого "\t"
как-то код странно приклеился
void read_File()
{
ifstream fin("networkinfo.txt");
netInfo C;
fin.getline(C.Name,'\t');
fin.close();
cout << C.Name << endl;
}
Т. е. по умолчанию считывается 1 байт?
Я ещё писал
fin.getline(C.Name, 20, '\t');
в этом случае всё считывается, но выдаётся такая ошибка:
Additional Information: В среде выполнения обнаружена критическая ошибка. Ошибка произошла по адресу 0x63cee100 в потоке 0xe3c. Код ошибки 0xc0000005. Она может быть вызвана ошибкой в CLR или в небезопасных либо не поддающихся проверке фрагментах пользовательского кода. Обычно источниками таких ошибок бывают ошибки упаковки, допускаемые пользователями при COM-взаимодействии, либо PInvoke, повредивший стек.
If there is a handler for this exception, the program may be safely continued.
Под спойлер ты, значит, не заглянул. Стыдно, анон. Лови, чо.
http://ru.cppreference.com/w/cpp/io/getline
Этот кун >>1072569
>basic_istream& getline( char_type* s, std::streamsize count, char_type delim );
там вообще нет интовых аргументов
>там вообще нет интовых аргументов
http://en.cppreference.com/w/cpp/io/streamsize
> The type std::streamsize is a signed integral type used to represent the number of characters transferred in an I/O operation or the size of an I/O buffer.
У \t код 9. Так что в буффер читается 8 символов + добавляется нуль-терминатор.
https://youtu.be/DDbahhVuG9c
Почему вам, плюсомразям, все тян достаются? Это несправедливо.
> Компилятору приходится впиливать общий для всех классов в код в каждый виртуальный вызов, он не может использовать более простой код специально для этого дерева наследования
Перепутал с динамик_кастом. Теперь я тоже не понимаю, почему виртуальный вызов хуже ифа.
>почему виртуальный вызов хуже ифа
Потому что промах кэша инструкций гораздо дороже бранч миспредикта.
C.Name = new char[17];
std::streamsize L = 20;
fin.getline(C.Name, L, '\t');
Спасибо всем, кто помогал
тот кун>>1072569
Кстати, вот этот прав.
Современные процессоры очень сильно выигрывают от OUT OF ORDER EXECUTION и BRANCH PREDICTION. А виртуальная хуйня не попадает ни в одну категорию оптимизаций. Ибо процессор заранее не может знать куда будет вести следующий jump, там может оказаться вообще не загруженный в кеш адресс, а еще хуже не загруженная в TLB страница, а еще хуже эта страница будет свапнута на диск, а еще хуже если это будет магнитный диск, а еще хуже если этот диск будет в suspend состоянии, а еще хуже если этот диск будет в NUMA кластере на другом юните, а еще хуже если э\тот юнит вообще будет в другом дата центре, а еще хуже если этот датацентр вообще будет в другой стране... Ну ничего пользователь подождет...
Бля как же я проиграл с этой хуйни прям с самого начала.
Как же смешно и нелепо когда тян лезут в области, в которых им не место.
Хотя это же С++ и детский алгоритм, который освоит даже 5 летний ребенок.
Посмотрел ее другой видос про девушек программистов. цитата из видео:
Мы девушки в программирование, как новое открытие в физике
АХаххахаах, как можно быть такой ебанутой.
А потом появляются всякие electron'ы, node.js и т.п И из-за толерантности люди начинают на этом делать приложения и все понимают что это тормозное говнище, но терпят ибо 21 век же! равноправие полов!
Посмотрите этот видос, я просто ору с некоторых ее кукареков и кукареков ее подруг "программисток".
https://www.youtube.com/watch?v=Bt4yf0khSBI
Пишу хеллоуворлд на вулкане, все вроде нормально, начинаю передавать команды на отрисовку, и все падает.
И фиг поймешь что не так и где искать.
Тян - не тян, какая разница?
Если человек пишет кривой падающий говнокод, то проблема ни в том что он парень или девушка, проблема в том что он криворукий идиот.
Нихуя не понял. Если ветка ифа выполнялась, она будет в кэше инструкций. Если виртуальный метод вызывался, он будет в кэше инструкций, а джамп из втабла будет в БТБ-кэше.
>>1072697
> А виртуальная хуйня не попадает ни в одну категорию оптимизаций. Ибо процессор заранее не может знать куда будет вести следующий jump
Нихуя не понял. Оба варианта - это джамп, причём, если ифов много (вложенных или последовательных) - то это много джампов с кучей фейлов (или процессор не станет применять БТБ там, где нет статистической выгоды?), а в виртуальном вызове фейл БТБ может быть только один.
>>1072756
Если ты отказываешься от дебугера, то try-catch.
Разница в устройстве психики и мозга тян.
Уже доказано многочисленными исследованиями, что тян плохо справляются с логическими и техническими задачами.
Я сам работал в одной тиме с тян, сказать что она говнокодила - ничего не сказать, более того она не понимала вообще что делает, она просто хуячила как ей там обьяснили в вузе или где она там училась не проверял. А еще там был конченый омега тимлид, который постоянно хвалил ее и относился к ней предвзято в лучшую сторону, так что за косяки ей не влетало, но зато другие получали пиздюли в 2х кратном размере если что-то не так ( конечно не от него самого ибо он даже в глаза боялся смотреть, он просто как настоящий чмоха-омега жаловался тех диру и продакт менеджеру, а они были не омеганами и высказывали нам что вот какие мы ебланы, премии не будет, а вот Машенька со слов тимлида молодец и вообще спасла нашу компанию от краха поэтому ей вот премия, хотя сука буквально пару часов назад я обьяснял этой машеньке в что нужно проверять condition_variable в цикле ибо он может ложно сработать, поэтому у нас падает весь сервер ) и вот такой хуйни было дохуище.
Теперь я работаю в другой конторе с норм мужиками, и если в команде появится тян, то я сразу уволюсь, хотя такого не будет ибо они понимают, что тян и программирование это как мартышка с гранатой.
> Разница в устройстве психики и мозга тян.
> Уже доказано многочисленными исследованиями, что тян плохо справляются с логическими и техническими задачами.
Сильное заявление. Пожалуй, его стоит проверить.
Твое наблюдение легче объяснить другим способом.
Скорее всего эта машенька была принята в контору из-за смазливой мордашки и сисек.
Думаю, среди парней тоже полно патологических тупиц с атрофировавшимся аналитическим мышлением, просто ты их не встречаешь. Потому что у них нет сисек чтобы попасть в одну контору с теми кто сможет оценить их "заслуги" по достоинству.
То что тимлид - омеган и пиздолис так же свидетельствует в пользу.
>читать 20 байт в 17 байтовый массив
Надеюсь, у тебя когда нибудь хакнут и отформатируют комп через переполнение буфера.
>Уже доказано многочисленными исследованиями, что тян плохо справляются с логическими и техническими задачами.
Вообщет доказано обратное, что у них усидчивость лучше.
> более того она не понимала вообще что делает, она просто хуячила как ей там обьяснили в вузе
То есть как и 99% кунов. Просто из за разницы в количестве при одинаковом проценте в абсолютных числах грамотных кунов больше.
Проверь.
Далеко ходить не нужно, погугли недавний скандал в гугл на эту тему, где чел написал охуительный вайтпейпер доказывающий это со всеми ссылками на авторитетные исследования. После чего его уволили ИБО СЕКСИЗМ!! А ОМЕРИКА ЛИБЕРАЛЬНАЯ СТРАНА И ПОХУЙ ЧТО ТАМ ДОКАЗАЛИ УЧЕНЫЕ.
Да знаю, поправил уже
>Да там весь код всех этих миниклассов в один кэш попадет.
В современных крестах, где шаблоны в мегабайты инлайн кода разворачиваются - далеко не факт. Кроме того, проц в любом случае простаивает: сначала пока адрес виртуальной функции не подгрузит, потом пока по этому адресу код не получит.
Ну чел идиот конечно, любая обезьяна могла предсказать подобный исход, так что публиковать стоило под вымышленным именем.
>>1072775
> Вообщет доказано обратное, что у них усидчивость лучше.
И это никак не связано со способностями к аналитическому мышлению и логике.
Усидчивость важна когда ты крестиком вышиваешь.
Как включить localStorage в WebView на андроиде в Qt/qml? Кто-нибудь тестил? Гугл молчит.
> любая обезьяна могла предсказать подобный исход
В этом случае, навеное, подвело аналитическое мышление, которым так славится мужской род
>И это никак не связано со способностями к аналитическому мышлению и логике.
Именно. Логическое мышление у М и Ж одинаковое, а усидчивость у Ж выше, значит она будет сидеть и писать более продуманный и качественный код.
Nyet, он наивный идиот потому что наивный идиот, а не потому что он мужчина/женщина/трап/боевой вертолет.
А вот чувак выше утверждает что не одинаковое, и некий сотрудник гугла привел множество пруфов.
Предлагаю всем заинтересованным рассмотреть мою позицию по данному вопросу:
Человек, утверждающий что кто-то решает некую задачу лучше по причине его половой принадлежности, а не интеллекта, нарекается идиотом.
Если конкретная женшина пишет хреновый код, это не значит что все остальные женщины пишут хреновый код.
Если конкретный мужчина пишет хреновый код, это не значит что все остальные мужчины пишут хреновый код.
>А вот чувак выше утверждает
Только без пруфов
>некий сотрудник гугла привел множество пруфов.
Не привел.
Позицию плюсую.
У тебя очень толерантное понимание, я тебя хвалю за политкорректность, но выводы у тебя очень неправильные.
Если взять случайно N мужчин и N женщин и посадить заниматься каким-нибудь интеллектуальным трудом, придумать внятную метрику для производительности, то получится так:
1) В среднем (по матожиданию) женщины и мужчины ничем не отличаются. Складываем метрики в обеих группах, делим на размер группы, получаем два одинаковых числа (главное, чтобы N было достаточно большое).
2) Когда мы попробуем проверить дисперсию выяснится, то откровенно глупых женщин гораздо меньше, чем откровенно глупых мужчин. Они все очень близки к середине, сказочных долбоёбок там немного, но и действительно умных искать днём с огнём. Среди мужчин окажется целая куча полных дебичей, но их скомпенсируют коллеги-задроты, которые будут решать задачу ощутимо лучше среднего сотрудника.
3) Из этого делаем вывод: женщины подходят для работы относительно небольшой квалификации. Бери любую тётку с высшим образованием, месяц обучай, и она будет нормально решать несложные задачи. Тестировать там, копировать код на стековерфлоу, или ещё что -- пожалуйста. Если тебе нужно решать сложную задачу, то надо искать кого-то, у кого есть способность решать такую задачу. А они находятся во второй, реже третей сигме у мужчин. У женщин третья сигма начинается до второй мужской.
Пруфы сам ищи в журналах.
А, да, это не значит, что мужчины умнее или лучше женщин, или наоборот. Просто это работает так. Если тебе нужен действительно хороший работник, ищи умного мужчину.
Я работал с тремя в разных компаниях. Два сеньера и мидл. Количество конечно небольшое, но могу сказать вот что по своему опыту:
1. Нихуя не умеют думать бошкой, чтобы решать архитектурные задачи. Им нельзя доверить проектирование проекта, который будет по сложности чуть больше недели. Начинаются вопросы А КАК А ЧЕ А ВОТ КАК БЫ ТЫ СДЕЛАЛ. Ну епта у тебя 4 года опыта подумай бошкой, а я проверю.
2. Отлично справляются с механическими задачами, если опишешь всё, что нужно сделать по шагам с максимальными подробностями. Как только что-то не получается и в гугле нет решения - сразу начинается нытьё и просьбы помочь.
3. Любят подзабить на работу. Если работяга-холостяк может задержаться, когда это надо - то бырышни ровно в 00 покидают офис, им ваще на всё поебать, на сроки, на баги, на бизнес процессы. Тупо похуй. Ну это еще одно. Второе - пиздец какие НЕЖНЫЕ - все три девки любили ПОБОЛЕТЬ. То жопа болит, то пизда, то нога, то сопли. Три недели работали, одну отдыхали. Конечно, приходили со справками, но типо нахуя такие работники вообще нужны?
4. Очень любят выносить всё на уровень руководства, вплоть до генеральных директоров. Например когда есть баг, девочка не соображает как его решить, а вася не хочет помочь (у Васи таски горят). Че делаем? ИДЕМ К ДИРЕКТОРУ И ЖАЛУЕМСЯ НА ВАСЮ.
5. Не сдав таски одна из девочек ЗАБЕРЕМЕНЕЛА. Ну здарова бандиты - у нас теперь карапузик и я больше не работаю у вас. А ниче что заказчику надо сдавать её недоделанную хуйню и сроки никуда не исчезают? Похуй, теперь она мама. Нахуй такие риски?
Вот етого двачирую, и программирование можно на что угодно заменить. Женщин на ответственные должности брать нельзя, и никто обучаемый их и не берёт.
Ну я хотел дополнить, что исключения есть. Есть тянки, которые именно ЕБАШУТ покруче любого хуеносца. Но ни а каком равенстве в данной области нет, большинство - треш и боль.
Поэтому, например, у работников гугла вызвал БАГЕТ указ о стремлении к отметке 50-50% женщин и мужчин в компании. Всех недовольных конечно пидорнули, но это уже другая история.
> указ о стремлении к отметке 50-50% женщин и мужчин в компании.
А вот это уже sjw-бредятина.
Набирать работников нужно сугубо по их способностям, и если так получится что женщин будет три с половиной человека, то так тому и быть.
Ну я и говорю с точки зрения статистики. Пожалуйста, конкретный случай высокой метрики в женской группе может быть, просто он гораздо менее вероятен. Нет ничего невозможного в появлении тянки, которая пиздец гениальный программист и круче всех кунчиков вместе взятых, но шансы на это мизерные. В среднем лучшие люди из мужской группы хуже лучших людей из женской. Зато худшие женщины гораздо лучше худших мужчин, а средних женщин гораздо больше, и с точки зрения HR это очень сладкий вывод. Но в гугл кандидаток среди женщин немного.
>Женщин на ответственные должности брать нельзя, и никто обучаемый их и не берёт
Да не пизди. Бухи везде - 100% бабское царство, юротдел - тоже большинство бабы. А там ответственность очень даже нужна.
> В среднем лучшие люди из мужской группы лучше лучших людей из женской
Пиздец, я уже сам путаюсь во всём этом словоблудии.
Бухи рядовые взаимозаменяемые и там бабское царство, но крутой бух -- почти обязательно с хуем. Не забывай, что бухгалтерия в понимании отдела небольшой организации это несложное занятие, я не понимаю, почему бухам вышку дают. А вот если надо налогообложение ОПТИМИЗИРОВАТЬ, а не 1ску заполнять, то там бух-хуемразь сразу.
С юристами там всё немного сложнее, конкретно юристов я не понимаю. Но это редкое исключение.
> В среднем лучшие люди из мужской группы хуже лучших людей из женской. Зато худшие женщины гораздо лучше худших мужчин
Но пруфов своему интуитивному ощущению ты, увы, не приведешь.
>но крутой бух -- почти обязательно с хуем
Теток главбухов как бы не больше чем мужиков, а главбух - второй человек в фирме обычно. Та же Набиуллина - плохой бух по-твоему?
Ну, допустим, приведу. Я же не пиздабол какой-нибудь, чтобы тебя в гугл посылать просто так, да? Я вначале проверил, что там не пусто (много лет назад), а потом тебя туда послал. На, просвещайся, босота.
https://doi.org/10.1016/j.intell.2010.04.006
https://doi.org/10.1111/j.1745-6916.2006.00019.x
>>1072815
Я оче уважаю Эльвиру Набиуллину в частности и женщин вообще, и уже писал свою позицию по поводу конкретных примеров. Reasoning на основе конкретных примеров это удел обывателей, а мы тут учёные и инженеры типа. Мы оперируем статистикой.
> Вырывает одну картинку из двух научных статей, которые даже не открывал
> Использует это в ответ на аргументацию из ссылок на рецензируемые научные журналы
> Статьи свежайшие
Ну такое. Ты вот на этой картинке левее был бы ;)
То есть, это не в уёбке-тимлиде мужского пола проблема.
>Уже доказано многочисленными исследованиями, что тян плохо справляются с логическими и техническими задачами.
Эти исследования выяснили, что это относится ко всем без исключения тян? У меня есть дохрена знакомых мужского пола, не справляющихся с логическими и техническими задачами.
>>1072776
>Далеко ходить не нужно, погугли недавний скандал в гугл на эту тему, где чел написал охуительный вайтпейпер доказывающий это со всеми ссылками на авторитетные исследования.
Доказывающий то, что все до одного тян плохо справляются с техническими задачами?
https://gizmodo.com/exclusive-heres-the-full-10-page-anti-diversity-screed-1797564320
Где это там написано?
>>1072790
>А вот чувак выше утверждает что не одинаково
Дык оно на самом деле может отличаться, только ты не психоневрологом работаешь, а программистом, и если кандидат решает нужные тебе задачи, это означает то, что он тебе нужен (опустим проблемы межполового взаимодействия).
>Предлагаю всем заинтересованным рассмотреть мою позицию по данному вопросу:
>Человек, утверждающий что кто-то решает некую задачу лучше по причине его половой принадлежности, а не интеллекта, нарекается идиотом.
>Если конкретная женшина пишет хреновый код, это не значит что все остальные женщины пишут хреновый код.
>Если конкретный мужчина пишет хреновый код, это не значит что все остальные мужчины пишут хреновый код.
Рациональная позиция.
>>1072794
Да, действительно, когда мне нужно будет нанять программиста и лучшим кандидатом будет женщина, я пошлю её нахуй потому, что статистически идеальных женщин-программистов меньше, чем мужчин. Так нужно тебя понимать? Ведь шовинистический высер, который мы обсуждаем, именно об этом и говорит. Я ещё могу понять закладывание в бюджет декретных рисков, но, блядь, если наниматель не может объективно оценить кандидатов на собеседовании, то не в поле кандидата проблема, верно ведь?
>>1072799
Хочешь ли ты сказать, что упомянутые проблемы принципиально не могут быть решены тимлидами и кадровиками?
То есть, это не в уёбке-тимлиде мужского пола проблема.
>Уже доказано многочисленными исследованиями, что тян плохо справляются с логическими и техническими задачами.
Эти исследования выяснили, что это относится ко всем без исключения тян? У меня есть дохрена знакомых мужского пола, не справляющихся с логическими и техническими задачами.
>>1072776
>Далеко ходить не нужно, погугли недавний скандал в гугл на эту тему, где чел написал охуительный вайтпейпер доказывающий это со всеми ссылками на авторитетные исследования.
Доказывающий то, что все до одного тян плохо справляются с техническими задачами?
https://gizmodo.com/exclusive-heres-the-full-10-page-anti-diversity-screed-1797564320
Где это там написано?
>>1072790
>А вот чувак выше утверждает что не одинаково
Дык оно на самом деле может отличаться, только ты не психоневрологом работаешь, а программистом, и если кандидат решает нужные тебе задачи, это означает то, что он тебе нужен (опустим проблемы межполового взаимодействия).
>Предлагаю всем заинтересованным рассмотреть мою позицию по данному вопросу:
>Человек, утверждающий что кто-то решает некую задачу лучше по причине его половой принадлежности, а не интеллекта, нарекается идиотом.
>Если конкретная женшина пишет хреновый код, это не значит что все остальные женщины пишут хреновый код.
>Если конкретный мужчина пишет хреновый код, это не значит что все остальные мужчины пишут хреновый код.
Рациональная позиция.
>>1072794
Да, действительно, когда мне нужно будет нанять программиста и лучшим кандидатом будет женщина, я пошлю её нахуй потому, что статистически идеальных женщин-программистов меньше, чем мужчин. Так нужно тебя понимать? Ведь шовинистический высер, который мы обсуждаем, именно об этом и говорит. Я ещё могу понять закладывание в бюджет декретных рисков, но, блядь, если наниматель не может объективно оценить кандидатов на собеседовании, то не в поле кандидата проблема, верно ведь?
>>1072799
Хочешь ли ты сказать, что упомянутые проблемы принципиально не могут быть решены тимлидами и кадровиками?
>это относится ко всем без исключения тян?
Бля олень, когда люди говорят так, это означает что в среднем.
Пиздец тут умственно отсталые сидят, которые даже не могут понять смысл простой фразы, а еще спорить пытаются.
>Так нужно тебя понимать?
Нет, не так. Ты вообще умеешь обобщать? Так нужно понимать вот этого господина >>1072799
Я, кстати, с ним согласен, но уже как менеджер. Как менеджер я утверждаю, что брать на серьёзную работу в юрисдикции РФ женщин -- безумие в 9 из 10 случаев.
Как учёный я просто заявляю, что среди женщин меньше умных людей (и меньше глупых) и поэтому тратить время на поиски надо в основном среди мужчин. Our words are backed with nuclear weapons! academic research.
Пока не началось: у меня есть тян, до этого было несколько, мне дают, и.т.п.
>Бля олень, когда люди говорят так, это означает что в среднем.
На ебало срал.
>и если в команде появится тян, то я сразу уволюсь, хотя такого не будет ибо они понимают, что тян и программирование это как мартышка с гранатой.
Добра.
Кобол написала тян.
Программу для расчета посадки лунного модуля тоже тян.
Хуеву тучу прог в 60 писали тни.
Ок убедил. Правда по твоим ссылкам в основном исследования детей из каких то спец классов. Но программисты тоже узкая выборка, и их можно сравнить со спец классом.
Хорошо:3
Я полагаю, что результаты можно обобщать. Сходу не вижу причин, почему нет но меня всегда можно переубедить
Просто для взрослой выборки очень тяжело выбить данные, и сравнивать очень тяжело, компетенции уже сильно отличаются.
>Хочешь ли ты сказать, что упомянутые проблемы принципиально не могут быть решены тимлидами и кадровиками?
Могут, надо детектить и посылать нахуй таких. И в итоге на 20 нормальных кандидатов-мужчин будет 1 женщина. Что как бы и говорит о том, что в целом женщины менее приспособлены к этой работе.
При этом автоматически отправлять в утиль любого кандидата, не имеющего между ног колбаски все равно тупо.
Можно провести сколько угодно исследований и сто раз неопровержимо доказать что в среднем женщины тупее обезьяны, но это не сделает хорошего программиста плохим.
Собственно, об этом речь и шла.
Да но женщины все равно хуже в программирование чем мужчины, как и во всем другом, кроме уборки дома, выращивания цветов и съемок в порнухе.
Зато мужчины грязные, вонючие, волосатые и разбрасывают носки.
Обе.
Конечно объективно, кто захочет вообще тян-чуханку, которая не следит за собой и за своим домом?
Очевидно, что жизнь тян это как можно выгодней себе продать за муж и сделать семью, поэтому для тян чистоплотность это очень важный критерий и пренебрегать им будут только ебанутые чуханки, которым похуй вообще на все. А кто захочет такую себе в жены? Никто.
Вот и вся арифметика.
Твоя "объективность" выражается в том, что ты свои частные случаи с чистоплотностью проецируешь на всех женщин, так же как и знакомых неудачных программист_ок на интеллект всех женщин.
В сосничестве я считал что человек познавая искусство программирования становится джедаем рациональности.
Ибо как писать хороший код, если ты мыслишь как гопожлоб?
Либо ты траль, либо я и впрямь был наивным дурачком.
А по факту, что в этом плохого? В школке объясняли, что динам. массивы для того и нужны
Все, затраллировал, сдаюсь, у меня бамбит, батрудинаф, пукан подгорел.
Как раз таки раздвинутся. В С/С++ эл-ты массива идут последовательно в памяти и, если надо, массив расширяется
И становится таким толстым, что начинает вытекать.
> эл-ты массива идут последовательно в памяти
Во-первых не только в с(++), это непосредственно определение массива в программировании.
Во-вторых раздвинуть динамически выделенную память ты не сможешь, только выделить заново, скопировать и освободить старую.
>Во-вторых раздвинуть динамически выделенную память ты не сможешь, только выделить заново, скопировать и освободить старую.
Ебанутые крестовики, даже не знаю о сишной функции realloc.
Конечно она не гарантирует расширения памяти без реалокации на новом адресе, но по возможности просто выделит слудующую за последним элементом память.
Прально! Нечего на этих крестах писать! В святой сишке все сами раздвинутся! Освободят место для новых! Не жадные же эти элементы массива! Раздвинутся!
Как ноги твоей мамаши, хуесос, пшёл в свой загон
...
Значит в js нет "классических" массивов?
Это уже список какой-то, как ты организуешь произвольный доступ к элементам если они идут как попало?
Сосач познавательный.
Слишком романтическое видение мира для программиста. Ты и вправду был наивным дурачком, и прелесть твоего профессионального пути в том что ты перестанешь (или уже перестал) им быть. Есть люди которые так и живут.
Realloc не гарантирует что массив останется на своем месте в физической памяти, и писать код следует из расчета что этого не случится. Плохой аргумент.
>>1073089
Этот тоже продвинутый. В сишке (вообще вот это институтское "си - си плюс плюс" это пиздец) ничего само по себе не расширяется, да и в плюсах тоже. В ко-ко-контейнерах под капотом как раз и происходит тот самый malloc / realloc.
Я не прогаю на JS, просто читал о нём
Этак можно с возрастом в конченого ценника-мизантрала превратиться.
Перестал, но у меня все равно есть какаое-то мутное чувство что технари в среднем должны быть хоть немного менее тупыми чем все остальные.
Перемотал в пару случайных мест - советует использовать сырые указатели, пиздит на shared_ptr и unique_ptr. Вы, не-плюсоводы, немного потеряли в её лице. Она же июнь, а туда же - видосики снимает, типа программированию учит. Вкатывающиеся в программирование люди в принципе все такие.
Слушаю дальше. Ох уж эти кухонные сравнения и произношение, мерзко слушать все эти "пэ тэ эр".
Интересно, у неё работа есть?
Хуй знает, у меня оно тоже есть.
Вот только ответа на вопрос я не получил. Задал я
type_name var* = new type_name[100];
А тут хуяк, а varov-то 102. И что такого страшного будет? Или как тогда правильно дин. массивы выделять?
>в физической памяти
Слышал про виртуальную память? Большинство современных ОС работают с виртуальной памятью, и не дают тебе адреса на физическую. Твой массив выглядящий линейным в твоей программе может быть раскидан вообще по разным слотам оперативной памяти, стоящей в твоем компьютере.
> И что такого страшного будет?
Утечки памяти, дыры в безопасности, гроб, кладбище, пидор.
> Или как тогда правильно дин. массивы выделять?
Хочешь запихать в массив 102 элемента, выдели память под 102 элемента.
Ясен хуй! В программировании (по крайней мере в с++) о физической памяти речи не идёт. Все эти ячейки 0хХХХХХХХХХ - это ЛОГИЧЕСКИЙ адрес, а не физический.
И вообще, мы же в крестотреде.
std::vector<typename> var, и пихай в него насколько оперативы хватит.
http://ru.cppreference.com/w/cpp/container/vector
Контейнеры-то я знаю. В вузике писал свой Вектор. И там выделял память с помощью new. Разве в std он не так же реализован?
Если уж на то пошло, то массив может быть отображен хоть на том подкачки, но мне-то всё равно, к вопросу это не относится.
Спасибо за важное уточнение, что массив в текущий момент времени необязательно будет лежать именно в физической памяти.
Используй библиотечный контейнер. В боевых условиях люди пишут свои саморасширяющиеся контейнеры, которые при добавлении / удалении реаллоцируются из каких-то эвристических предположений (мол в меня уже запендюривали один раз тысячу объектов, потом убрали их, а потом запендюрили десять, так что в этот раз я опять расширюсь до тысячи).
Страшно будет то, что программа перезапишет код или данные другой программы. Скорее всего система не даст ей этого сделать, но хз что у тебя за система. Так или иначе правильная работа как минимум твоей программы с того момента как она записала данные хуй знает куда не гарантирована.
Ни небо, ни даже аллах не в состоянии написать на си динамический массив без перевыделения памяти.
Чувак выше написал про realloc, но в общем случае он ничего не растягивает.
В чем вообще твоя проблема?
>Страшно будет то, что программа перезапишет код или данные другой программы
Это вообще реально? Даже если массив релоктится, но не туда же, где память занята другой программой?
>>1073157
>В чем вообще твоя проблема?
Как православно выделять динамические массивы? Что плохого в new? Что страшного в релокации массива?
Массив реаллоцируется в незарезервированную, свободную память. Но ты-то, делая так:
char arr[100];
arr[102] = 4;
пишешь не в массив, а за его границу.
Предположим ты подсмотрел в отладчике, что arr у тебя указывает на 0xB0000000, значит заканчиваться он будет на адресе 0xB0000063, а arr[102] будет указывать на 0xB0000065, то есть в память, которая может быть занята.
> Как православно выделять динамические массивы?
Используй стандартный контейнер, для 99% задач его хватает.
Если твоя задача входит в оставшийся 1%, навелосипедь свой на том же new.
> Что плохого в new? Что страшного в релокации массива?
Тебе тут наоборот пытаются объяснить что это прельстиво и любовно.
В c++ нет динамических массивов как языковой конструкции с [], уймись.
Запускаеш cmake-gui
указываешь папку с исходниками и папку, куда хочешь чтобы билдилось
Нажимаешь configure
Молишься чтобы все сошлось
Указываешь нехватающие пути, подсвеченные красным
Повторяешь последние два пункта пока не надоест
Нажимаешь generate
Получаешь студийные проекты, которые уже компиляешь в студии.
Thread 2 "worker0" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff5209700 (LWP 1331)]
0x0000555555559170 in perf_hist_check_range (range=0x8000555555570a30, val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:143
143 if(val < range->min)
(gdb) bt
#0 0x0000555555559170 in perf_hist_check_range (range=0x8000555555570a30, val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:143
#1 0x00005555555591f8 in perf_hist_bsearch16 (val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:167
#2 0x0000555555559256 in perf_hist16_add (hist=0x55555577f0e8, val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:188
#3 0x000055555555acfb in rsched_worker (arg=0x55555577f080) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:860
#4 0x00007ffff7bc108a in start_thread () from /usr/lib/libpthread.so.0
#5 0x00007ffff74d71bf in clone () from /usr/lib/libc.so.6
(gdb) frame 0
#0 0x0000555555559170 in perf_hist_check_range (range=0x8000555555570a30, val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:143
143 if(val < range->min)
(gdb) list
138
139 static inline
140 int perf_hist_check_range(const struct perf_hist_sample_range range,
141 uint64_t val)
142 {
143 if(val < range->min)
144 return -1;
145 else if(val >= range->max)
146 return 1;
147 else
(gdb) p val
$1 = 103558165
(gdb) p range->min
Cannot access memory at address 0x8000555555570a30
(gdb) p range
$2 = (const struct perf_hist_sample_range ) 0x8000555555570a30
(gdb) x range
0x8000555555570a30: Cannot access memory at address 0x8000555555570a30
(gdb) frame 1
#1 0x00005555555591f8 in perf_hist_bsearch16 (val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:167
167 f_hist16_range[m];
(gdb) list
162
163
164 while(l <= r)
165 {
166 m = (l + r) / 2;
167
168 range = &perf_hist16_range[m];
169
170 cmp = perf_hist_check_range(range, val);
171
Thread 2 "worker0" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff5209700 (LWP 1331)]
0x0000555555559170 in perf_hist_check_range (range=0x8000555555570a30, val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:143
143 if(val < range->min)
(gdb) bt
#0 0x0000555555559170 in perf_hist_check_range (range=0x8000555555570a30, val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:143
#1 0x00005555555591f8 in perf_hist_bsearch16 (val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:167
#2 0x0000555555559256 in perf_hist16_add (hist=0x55555577f0e8, val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:188
#3 0x000055555555acfb in rsched_worker (arg=0x55555577f080) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:860
#4 0x00007ffff7bc108a in start_thread () from /usr/lib/libpthread.so.0
#5 0x00007ffff74d71bf in clone () from /usr/lib/libc.so.6
(gdb) frame 0
#0 0x0000555555559170 in perf_hist_check_range (range=0x8000555555570a30, val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:143
143 if(val < range->min)
(gdb) list
138
139 static inline
140 int perf_hist_check_range(const struct perf_hist_sample_range range,
141 uint64_t val)
142 {
143 if(val < range->min)
144 return -1;
145 else if(val >= range->max)
146 return 1;
147 else
(gdb) p val
$1 = 103558165
(gdb) p range->min
Cannot access memory at address 0x8000555555570a30
(gdb) p range
$2 = (const struct perf_hist_sample_range ) 0x8000555555570a30
(gdb) x range
0x8000555555570a30: Cannot access memory at address 0x8000555555570a30
(gdb) frame 1
#1 0x00005555555591f8 in perf_hist_bsearch16 (val=103558165) at /home/greg/Sources/mandelbrot2/mdb/sched/rsched2.c:167
167 f_hist16_range[m];
(gdb) list
162
163
164 while(l <= r)
165 {
166 m = (l + r) / 2;
167
168 range = &perf_hist16_range[m];
169
170 cmp = perf_hist_check_range(range, val);
171
>А если я не знаю заранее, сколько будет элементов?
Тогда используй vector.
>>1073145
> В программировании (по крайней мере в с++) о физической памяти речи не идёт
C++-проге ничто не мешает на bare metal выполняться, зачем вы пиздите?
>>1073158
>Как православно выделять динамические массивы?
ВЕКТОР БЛЯДЬ.
>Что плохого в new?
Возможны утечки памяти из-за отсутствия delete.
Реаллокнуть то, что выделено с помощью new, ты не можешь.
>Что страшного в релокации массива?
Адрес поменяется (или нет).
>>1073179
Мне тебе сказать нечего.
Я просто не верю что такая простая задача не имеет простого и лаконичного решения.
Алсо мой код.
int N=0, t=0, d=1;
cin>>N;
vector <int> v = {};
while(N)
{
t +=(N%2)d;
N=N/2;
d=d10;
}
v.push_back(t);
for (auto x:v){
cout << x;
}
>Гугление дало такой бред что я просто в шоке. Большинство кода выдаёт неверный перевод, а то что выдаёт верны требует подключение <YOBAMEGASUPERLIB.h>
this
Пожалуйста. Для начала, научись вручную переводить из одной СС в другую
до этого у меня было так:
long* label_lookup = new long[labels];
Но как я понимаю, что он хапает просто кусок памяти, в котором может быть любой мусор, а значит хуй там, а не нули по умолчанию. Чё, как?
Сука ебаный двач не завез встроенный тег для кода и схавал звездочку.
long(звездочка) label_lookup;
label_lookup = calloc(labels, sizeof((звездочка)label_lookup));
>Иди нахуй со своим вектором.
C++ тред, а не Си. С голыми массивами и выделением памяти callocом можешь пройти нахуй.
>C++ тред
Вот именно С++, а не Java.
Не нравятся голые массивы, пиздуй в Ява тред.
Цитата философии С++ из вики:
- Programmers should be free to pick their own programming style, and that style should be fully supported by C++.
- Allowing a useful feature is more important than preventing every possible misuse of C++.
Так что можешь пойти нахуй со своим вектором.
calloc не запрещен в С++ он быстрее и лучше твоего сраного вектора.
https://pastebin.com/jfGQ6WXZ
При N=1000.
Как ты на разных процессорах тестируешь? Переставляешь новый камень в сокет или на другой системе или на другом компе тестишь?
А что там за артефакты на первой пикчи?
Еще этот OpenGL 1.0..
Короче я хз на винде что там есть, но тебе нужно в профайлере смотреть.
Либо вручную замерять скорость исполнения функций.
Спасибо, но ещё вопрос, Серёжа!
Замутил я этот вектор, всё прям-таки писечка!
Нужно будет его удалять как-то, прямо-таки ручками освобождать место после того, как мне он уже не нужен будет?
Такой расклад, из main дёргаю пару раз функцию, в которой и создаётся этот вектор. Так вот, после возвращении функции, память же не освобождается? Как это у вас в крестах там делается?
Серёжа, в душе не ебу про вектор, но с ним всё нормально получилось. Расскажи для пацанов в чём зашквар с ним.
Вообщем проблема такая, кидаю exe файл с компа i7 на i5, фпс норм ~440. Но как файл собираемый на i5 дает хуевый фпс, хотя уже проект целиком скинул с i7. И студии одинакого не настраивались из коробки, только openMP включал, и на i5 он тоже вкл.
>А что там за артефакты на первой пикчи?
TeamViewer дает артефакты.
вектор в деструкторе сам вызывает free/delete[]/dealloc
Тем что вектор сначала выделяет память а потом инициализирует ее значениями.
А calloc сразу выделяет инициализированную нулями.
Ну и бред.
Может еще вместо условий и вызова функций goto будем использовать, да?
Твой удел, хуесос - макакить на лабах. В любой конторе за использование маллоков каллоков, а также за голые указатели - тебя пидорнут сразу же, если не сможешь объяснить свой высер. Ты не смог. Пиздуй в Си-тред.
>Но как я понимаю, что он хапает просто кусок памяти, в котором может быть любой мусор, а значит хуй там, а не нули по умолчанию. Чё, как?
С дин. массивами примерно так и есть.
http://en.cppreference.com/w/cpp/language/new
> Как там побырику инициализировать массив с нулями произвольного размера?
ВЕКТОР БЛЯДЬ. >>>>>>> >>1073405
>>1073438
>Цитата философии С++ из вики:
Это цитата философии создания языка, уёбок. Если ты хочешь динамический массив, тебе нужен вектор, а не нью, который ты не можешь ресайзнуть и который ещё ручками удалять надо.
>>1073447
>Нужно будет его удалять как-то,
Если ты его не с помощью нью сделал, упаси хоспаде - нет.
>>1073478
Нихуя не понял, ФПС разнится в зависимости от машины сборки, а IDE настроена одинаково? Тогда это пиздец. Задай вопрос на СтакОверфлоу, это будет отличный вопрос.
>>1073495
>А calloc сразу выделяет инициализированную нулями.
А ещё в кажждом байте памяти, выделенной калоком, в два раза больше бит и flip-ошибок меньше. Используйте каллок, посоны!
А разве ФПС зависит не от видяхи?
Но возможно где то в компиляторе флаги выставились, не подключающие какое то расширение процессора.
>calloc не запрещен в С++
http://eel.is/c++draft/intro.object#1.sentence-2
> An object is created by a definition, by a new-expression, when implicitly changing the active member of a union, or when a temporary object is created
Тут не написано, что an object is created by calloc.
>инициализировать массив с нулями произвольного размера
Хуясе. Не знал, что бывают нули разных размеров.
>>1073533
>>1073534
Легкий детектор макак - напиши в С++ треде про malloc/calloc/realloc/free в ответ получишь гневное визжание маккакенов. Кек.
>тебе нужен вектор
Ты скозал?
>не можешь ресайзнуть
Поясняю для дебилов - realloc.
>и который ещё ручками удалять надо.
Ойй бля у маки ручки отсохнут ручками что-то удалить... бедная обезьянка, а вдруг она вообще забудет удалить и будет мим лик, и макакена турнут с его говноконторки.
Алсо, RAII можешь использовать, если ты такой тупой, что можешь забыть удалить память.
>Нихуя не понял
>IDE настроена одинаково
>Тогда это пиздец
>Задай вопрос на СтакОверфлоу
Я просто даже не представляю, ты либо студент первокурсник, либо настоящий дебил.
При чем здесь IDE? IDE это всего-лишь редактор, за генерацию бинарника отвечает компилятор, а не IDE.
Конечно ты нихуя не понял, ты же привык чуть что сразу бежать копипастить со стек оверфлоу или сразу ныть там/здесь или под юбкой своей мамаши, что не можешь осилить элементарный профайлинг.
>>1073526
> В любой конторе за использование маллоков каллоков, а также за голые указатели - тебя пидорнут сразу же, если не сможешь объяснить
Я же не долбоеб работать в конторах с макаками.
У нас вообще STL запрещен.
>>1073533
>>1073534
Легкий детектор макак - напиши в С++ треде про malloc/calloc/realloc/free в ответ получишь гневное визжание маккакенов. Кек.
>тебе нужен вектор
Ты скозал?
>не можешь ресайзнуть
Поясняю для дебилов - realloc.
>и который ещё ручками удалять надо.
Ойй бля у маки ручки отсохнут ручками что-то удалить... бедная обезьянка, а вдруг она вообще забудет удалить и будет мим лик, и макакена турнут с его говноконторки.
Алсо, RAII можешь использовать, если ты такой тупой, что можешь забыть удалить память.
>Нихуя не понял
>IDE настроена одинаково
>Тогда это пиздец
>Задай вопрос на СтакОверфлоу
Я просто даже не представляю, ты либо студент первокурсник, либо настоящий дебил.
При чем здесь IDE? IDE это всего-лишь редактор, за генерацию бинарника отвечает компилятор, а не IDE.
Конечно ты нихуя не понял, ты же привык чуть что сразу бежать копипастить со стек оверфлоу или сразу ныть там/здесь или под юбкой своей мамаши, что не можешь осилить элементарный профайлинг.
>>1073526
> В любой конторе за использование маллоков каллоков, а также за голые указатели - тебя пидорнут сразу же, если не сможешь объяснить
Я же не долбоеб работать в конторах с макаками.
У нас вообще STL запрещен.
>У нас вообще STL запрещен.
>Лид-Васян сказал, что можно юзать только его велосипед на кал-лок
Ору.
РРРЯЯЯ только МАЛОКИ ТОЛЬКО ВЕЛОСИПЕДЫ ОЙ ЧТО ОШИБКА 00000A АКСЕС ВИОЛЕЙШН ЧТООО?? ПАМЯТЬ УТЕКЛА СТЕК ПОКОРРУПЧЕН БЛЯ СРОЧНА ВСТАВЛЯЕМ FREE ВЕЗДЕ ГДЕ МОЖНО МЕМСЕТ САЛЛОС ГОУТУ ОЙ БЛЯДЬ ДВА РАЗА ВЫЗВАЛИ ФРИ НА УКАЗАТЕЛЬ И ВСЁ РУХНУЛО БЛЯ ЁБАНЫЙ ТИМЛИД ФОПЕН ФРИД ((ANUS)(VOID) (...)) СКТРОЧКА НЕ УМЕСТИЛОСЬ В БУФЕР ЧАРОВ АКСЕС ВИОЛЕЙШН ОЙ КАК ТАК PRINTF("Я ЕБЛАН") ГЕТЧАР ПУТС Я ПУПС КОКОКОКО ОКОКОКОКОКО
Ну если бы разрабатывал когда-нибудь real-time приложения, то понимал бы почему так. А пока иди лабу делай.
>Ну если бы разрабатывал когда-нибудь real-time приложения, то понимал бы почему так. А пока иди лабу делай.
ПИздуй отсюда в Си-тред со своими ахуительными советами и малоками.
Вот это бомбануло у обезьянки. Проиграл.
Есть ли аналоги ?
При чем здесь С тред?
Я в ахуе от развития здешних """"ПРОХРАММИСТОВ"""", которые о программирование знают только из фильмов про хакеров, лол.
Ты думаешь, если в С++ есть уже готовенькое, то только это надо использовать? Ты не думал, что С++ очень раздутый язык и многое оттуда не нужно, особенно в приложениях зависящих от производительности?
Алсо, у нас еще виртуальные функции запрещены и шаблоны можно толкьо умеренно в особых случаях.
>real-time
>плюсы
>динамическое выделение памяти
Все, вытекаешь. Да, мы поняли что у тебя и шинда реал-тайм ОС.
В настоящих приложениях критичных до скорости выделения памяти - нормальные программисты не переходят на маллоки, а делают свои пулы памяти, пулы объектов и аллокаторы.
Маллоки и прочие сишные забавы - это рак, который убивает сколь-либо большие проекты на крестах. Профитов от них практически нет, а использование грозит отказом в самый нужный момент.
А ты что все на стеке будешь делать?
Память выделенную маллоком можно залочить вообще-то.
>>1073565
Так у нас есть свои специальные алокаторы, но они не для всей памяти, только для самой критичной в лок фри алгоритмах. Ну в общем то для более обычной памяти у нас тоже свои алокаторы. Ну если тебе не критично, то можешь использовать маллок с локом.
В реалтайме не может быть динамической памяти, точка. Потому что объем и, соответственно время обнуления, недетерминировано. Все массивы задаются фиксированными и статическими. Это закон, иначе у тебя уже не реалтайм.
Ясен хуй, ведь создание объекта - это ещё и его конструирование (в общем случае), а каллок умеет только нулями заполнять. Никто не запрещает тебе использовать плейсмент нью.
>>1073547
Отвечу тебе, чтобы ньюфаги что-нибудь новое узнали.
>Поясняю для дебилов - realloc.
Поясняю для генетических уродов: если ты realloc-аешь память, выделенную с помощью new или new[], то это UB.
>При чем здесь IDE?
При том, что в данном случае компилятор - часть IDE, и параметры компиляции - это часть проекта, который можно открыть только в IDE, и параметры компиляции будет определять IDE.
>Алсо, RAII можешь использовать
Шаред_поинт на память вместо вектора? Вилку за столом тоже ногой держишь?
>>1073550
RAII, 21 век! Как только вектор перестаёт быть видимым, вызывается деструктор и сам освобождает память.
>>1073599
>Память выделенную маллоком можно залочить вообще-то.
Штоблядь.
>>1073630
http://en.cppreference.com/w/cpp/string/basic_string/basic_string
Тебе конструктор нужен? Выбирай любой.
Класс где s1=s2 не копирует всю строку, а копирует ссылки как в джаве 2 переменные указывают на одну строку. Но при этом строка изменяемая, а не как в джаве.
Твое невежество просто угнетает. Я просто оставлю тебе ссылку и пойду пить пиво в бар.
https://rt.wiki.kernel.org/index.php/Dynamic_memory_allocation_example
Слив засчитан.
Нет. Не обязательно cow. Можно чтобы изменение в первой переменной приводили к изменению второй т.к. они на один объект указывают. Как с обычными ссылками.
Дак заведи переменную str, и везде где надо поменять str - меняй str, кек
Не понял нихуя, что мешает тебе сделать ссылку?
int a = 50;
int &b = a;
b = 40;
cout << a; //40
Строки это для простоты примера. Мне нужен ссылочный тип, который изменяемый. Передавать объект рекурсивно в функцию. Поменялся объект на одном уровне рекурсии значит поменялся на всех. И чтобы когда объявляю объект этого класса членом этого же класса, то он всё рано должен создаваться в динамической памяти, но чтобы это был именно объект, а не указатель. Шаблоны иногда жалуются, что в них создают не компилируемые объекты, а если переделать их ссылками, то всё работает. Нужно точно так же, но чтобы не пришлось каждый раз явно разыменовывать ссылку когда выполняю операции над объектом.
>>1073682
Почти так, но нужен целый класс с таким свойством. Чтобы не int a, int& b, а T a, T b.
То есть, ты можешь доказать, что realloc памяти, выделенной с помощью new - это не UB. Или ты пиздобол?
>>1073689
У тебя есть два варианта:
1) либо все твои функции принимают строку по reference (и я не могу понять, в чём у тебя проблема)
2) либо они все принимают http://en.cppreference.com/w/cpp/utility/functional/reference_wrapper
3) либо они все принимают shared_pointer на ссылку
На кой ляд тебе нужен именно класс вместо передачи по ссылке, если не для memory safety - хуй знает.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
#include <string>
void a_to_be(char d_line);
int main(int argc, char argv)
{
// получить и обработать
cout << "else-else-else" << endl;
return 0;
}
void a_to_be(char d_line)
{
// d_line.replace
cout << "empty" << endl;
}
Выхлоп clang-3.8 - http://paste.debian.net/990066
https://pastebin.com/5yEiCJaX
я не раздуплю, что происходит внутри двух циклов, хотя знаю, что оно должно сделать. но из-за всей этих | и % не особо могу понять отдельные шаги.
для общей картины, эта функция должна записать двухмерный array из int в бинарную PBM картинку. то есть приходит что-то типа [[1,1,1,1,1,1,1], [0,1,1,1,1,1,1]], а в файл потом скидывается байтики FE 7E. (пардон за питоноблядский список как пример, я душу змею обычно)
ну и конечно сам код я спиздел отсюда:
http://people.sc.fsu.edu/~jburkardt/cpp_src/pbmb_io/pbmb_io.cpp
короче, поясните мне за 17 по 23 строчки в пастебине
| это битовое или.
% это остаток от деления.
<< сдвиг на несколько бит.
Итак по порядку:
i%8 это i завернутое в кольце по модулю 8. Т.е. после 7 пойдет 0, 1...
7 - (i%8) это соответственно инверсия, 0,1,2... превращается в 7,6,5...
indexb последовательное чтение значения из твоего массива [0,0,1]
(indexb)%2 хз зачем. Превращает все четные в 0, нечетные в 1.
bit << k сдвигает предыдущее значение на k битов влево.
Соответсвенно если у тебя i = 1 (второй байт), k = 6, если значение из массива было 1b, то станет 1000000b, если было 0b, то это просто работа проца вхолостую.
Ну а дальше бит ставится через OR в "аккумуляторе" c для текущего байта.
Спасибо, Серёжа! чую нужно будет достать блокнотик и чисто карандашиком прорешать пример, пока я ещё сходу не понял всё это. Но ты молодец, вообще у вас тут очень всё цивильно, даже нахуй меня ни разу не послали, что почти обидно самую малость.
По ссылке получать не получится т.к. в некоторых случаях нужно будеь nullptr передавать. Нужен какой-то конструктор для этого. Но это пока не важно как и работа с шаблонами. Эти проблемы буду решать по мере поступления. Вообще мне нужно поведение похожее на то, что в джаве, где всё по ссылкам передаются, но так чтобы изменение переменной внутри рекурсивного вызова приводило к изменению самого объекта, а не как в джаве к присвоение переменой новой ссылки а другой объект. В с++ наверно тоже такое есть. Щас подумал. Это похоже больше похоже на поведение указателей, а не ссылок. Но всё равно такое поведение должно быть запрограммировано в самом классе, а не создавать ссылку на объект этого класса каждый раз когда я захочу такое поведение. А его я захочу всегда. Решение с shared_pointer выглядит самым подходящим, но как его впихнуть самого класса? Чтобы выглядело будто typedef сделал.
>По ссылке получать не получится т.к. в некоторых случаях нужно будеь nullptr передавать.
Блин, ты сам спросил и сам ответил. Как ты можешь передавать нулптр, не передавая указатель? Странный заппрос, мягко говоря. Ты не нуллптр передаёшь, ты передаёшь информацию "указатель не определён", для этого есть методы в shared_ptr и для этого ты можешь использовать состояние объекта.
Не могу понять твою проблему, ты темнишь. Хочешь передавать указатель - передавай указатель, что тебе мешает? Джаву не видел никогда.
>Но всё равно такое поведение должно быть запрограммировано в самом классе
>Решение с shared_pointer выглядит самым подходящим, но как его впихнуть самого класса? Чтобы выглядело будто typedef сделал.
Если я правильно тебя понял, тут тебя ждёт облом. Переоппределение operator. ещё не завезли (это такой инструмент для перенаправления всех обращений к членам), так что ничего лучше, чем shared_ptr<T> ты не получишь - всегда будешь писать -> вместо . и всегда будешь создавать указатель.
НО. Если ты решительно готов к тому, чтобы пердолиться с каждым классом, для которого тебе нужно такое поведение, то тебе нужно сделать так:
http://coliru.stacked-crooked.com/a/35d2678be310defe
То есть, на каждый публичный мембер тебе придётся определить метод - либо прокси-метод, либо геттер и сеттер. Так что если ты хочешь кого-то наебать, передавая такой НЁХ в функции, и у тебя есть члены-переменные - без сеттеров/геттеров не получится.
Похоже не получится объяснить что я хочу не объясняя что я делаю. У меня есть самописный map на джаве на основе бинарного дерева поиска. Там 2 класса. Для самого мапа и для ноды. Но функции поиска и вставки перенесены в класс ноду, а в мапе просто обёртка. Это можно переписать в 1 класс. Хотя придётся помучаться с переносом функции удаления, но это потом. Именно это я и хочу сделать. Но на крестах т.к. в джаве нет такой свободы работы с ссылками. По логике это ещё должно быть шаблоном и некоторые функции должны принимать nullptr. Это в самом алгоритме записано и ни на каком языке от этого не избавиться без всяких извращений. И с клиентской стороны не должно быть отличий. Клиент должен создавать объект этого класса, а не ссылку или указатель на него. Работать как с обычным мапом.
Сайт не открывается. Скинь где подробнее описан тот способ, что ты назвал.
>Класс где s1=s2 не копирует всю строку, а копирует ссылки как в джаве 2 переменные указывают на одну строку.
Ты придумал, как ты будешь присваивать строке в таком случае? Если s1=s2 делает s1 указывать на s2, как тогда изменить строку присвоением?
Я только что прочитал оп пост и понял что оп няшка. Я влюбился в этот язык.
Хуйню написал, похоже что ты ебаный шизик.
Ну и я тоже самое смог найти. Всего 2 курса, из них один - это продолжение второго.
Ты самое главное не сказал: почему тебя не устраивают указатели. Ты можешь, например, сделать обёртку над шаред_птром.
Виж. Ты предлагаешь новый класс обёртку для предыдещего делать? Так не получится т.к. эта обёртка будет работать только с клиентской стороны. А мой класс ещё сам себе клиент. Я не смогу написать определения функций в самом классе пока у него не будет возможности самого себя через умный указатель передавать в себя рекурсивно. Может эти функции из второго класса можно в первый отправить и держать их как обёртку для приватных рекурсивных чтобы сделать напрямую рекурсию когда публичные вызывают приватные, а приватные публичные?
По поводу нихуя не понял. Обычно деревья делают так. Один класс для дерева и один для ноды. В классе дерева корневая нода и функции для работы с деревом, а в классе нода только пары ключ значение и указатели на дочерние ноды. Я избавляюсь от класса ноды. В классе дерева пары ключ знаяения корня, указатели на дочерние поддеревья и функции для работы с деревом. Поэтому теперь не ноду нужно передовать в функцию, а поддерево, которое того же типа что и само дерево. Но интерфейс со стороны клиента не должен измениться. Вот с этим главная проблема.
>>1074397
Указатели устроивают. Только обёртку нельзя делать отдельным классом. Поведение, которое даёт обёртка должно быть у всех клиентов моего класса, а он клиент для самого себя.
Это не главная проблема. Потом решу. Указатели нормально подходят. Мне нужно как-то разыменовывать указатели с помощью оператора точки. Чтобы клиент тем же интерфейсом пользовался. У меня план сделать рекурсивные функции с умным указателем и обёртку для них обычные функции всё в одном классе. Где-то передавать this в рекурсивную функцию где-то nullptr. При рервом вызове составать sharedptr и дальше его передавать. Или сразу в обёртке его создавать. Короче я кажется понял. Пойду пытаться умные на уных указателях писать. Спасибо.
> Мне нужно как-то разыменовывать указатели с помощью оператора точки
Я уже писал про это выше.
NIET
Твои заморочки какие-то ебанутые.
Ты переделал свой класс что дерево стало нодой корня. Нихуя не вижу проблем никаких для клиенского кода, если методы совпадают. И причем тут вообще копирование по ссылке.
Ты ебанутый черт. Или просто ебаный даун который в программировании первый день и когда начал писать дерево решил какую-то хуйню умную приплести.
Это копия, сохраненная 27 октября 2017 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.