Alexander
Он по умолчанию на маке идет
Levon
А, я понял
Alexander
Можно прикрутить с помощью костылей GDB, но такое
Levon
Недавно узнал, что после методов класса можно писать всякие спецификаторы типа volatile
Levon
До недавнего времени думал, что только const final и override можно
Levon
Оказалось ещё много чего типа & или &&
Matwey
Не ты первый. Тут обсуждалось что можно перегружать функцию по спецификатору volatile, но никто так и не придумал зачем
Levon
Кстати, действительно, а зачем? Не думаю, что есть какое то практическое применение
Levon
Что-то наряду с протектед наследованием
Levon
Есть, а где использовать не понятно
Anonymous
Berkus
Matwey
http://en.cppreference.com/w/cpp/utility/optional/value
например вот зачем
Berkus
Alexander
Berkus
а, ну это может быть, всё равно lldb лучше
Alexander
Не спорю, потому и пытаюсь подцепить в креатор
Levon
это ещё зачем, кстати)
Что то типа вот такого
void f() & {} // lvalue
void f() && {} // rvalue
Levon
Это методы класса разумеется
Anonymous
ну поведение примерно пониманю, первое вызывается при обращении через lvalue-ссылку, второе через универсальную
Anonymous
Levon
Anatoly
Anonymous
а, ну, да
Anonymous
ближе к часу ночи понимание происходящего спадает)
Matwey
Кстати, прикольно
Причем внутри эти 4 функции реализованы одинаково скорее всего :(
Matwey
В смысле буквенного кода
Levon
Угу, это все для дедюса типа
Matwey
Хотя не уверен про &&
Денис
🦋
Anatoly
Qt 5.9.2 зарелизился, 300 багов зафиксили, новых фич не добавляли: http://blog.qt.io/blog/2017/10/06/qt-5-9-2-released/
Anatoly
Плюс зарелизили Qt Creator 4.4.1 на базе Qt 5.9.2: http://blog.qt.io/blog/2017/10/06/qt-creator-4-4-1-released/
Billy
Billy
а как сюда файл заслать ? Это можно ?
Anatoly
Anatoly
На скрепку кликни
Billy
то есть можно
Billy
я всмысле про разрешение спрашиваю. ))
Billy
а не. мне еще нельзя ) я еще маленький
Dr. Friedrich
Хочешь нам свой бинарник с вирусами показать?
Billy
та не. я ж вчера задачку обещал
Dr. Friedrich
Я дал пермишен на файлы, засылай.
Billy
Задачка
Billy
Там есть баги. Файл не компилится: сразу говорю. Это не важно для задачи. Решается в уме. Там 2 типа багов. одни по языку, другие по дизайну. и те и те найти можно с листочком бумаги.
Billy
Код настоящий, работал, пока я не стал его трогать палкой)))
Billy
если какие-то вопросы, то отвечу
Alexander
Alexander
Понял. ))
Anatoly
я не нашел способа определить friend функцию вне определения внутреннего класса шаблона класса. это вообще возможно?
Anatoly
Я не нашел способа определение friend функции вне определения вложенного класса B:
/// предварительное объявление шаблона класса A
template<class T> struct A;
/// определение шаблона класса А
template<class T>
struct A {
/// предварительное объявление внутреннего класса В
struct B;
};
/// определение внутреннего класса B
template<class T>
struct A<T>::B {
/// определение шаблона функции foo другом
friend void foo(B& a)
{
a.x = 100;
}
/// определение шаблона оператора == другом
friend bool operator==(const B&a, const B&b) {
return a.x == b.x;
}
private:
int x = 10;
};
Anatoly
это не я, но автор хочет определение
/// определение шаблона функции foo другом
friend void foo(B& a)
{
a.x = 100;
}
вынести за пределы определения B
Anatoly
был вариант
template<class T>
struct A<T>::B {
template<class U>
friend void foo(typename A<U>::B&);
...
};
template<class U>
friend void foo(typename A<U>::B&) {...}
...
A<int>::B a;
foo(a);
но здесь по понятным причинам не работает дедукция и обязательно надо сказать
foo<int>(a);
Anton
Привет, кто нибудь сталкивался с тем что clang копилятор генерирует код отличный от того что ты написал? Есть тривиальный метод, в котором вектор заполняется элементами и затем возвращается. Clang с отключенной оптимизацией кода запихивает вектор в тело цикла (судя по assemby), соответственно вектор постоянно разуплотняется после итерации, а с O1 например все работает как и должно.
Levon
Недавно на хабре была статья, что этот Clang вызывает функцию с инициализацией статик функции, хотя ту функцию никто не вызывает. Типа находит где эта статик функция может инициализироваться, и инициализирует сам, чтобы не была вызвана NULL функция
Levon
Щам найду статью
Levon
https://m.habrahabr.ru/company/infopulse/blog/338812/ вот статья если кому интересно
Levon
И дала вызывать функцию которая не вызывается? :D
Anton
Это-то понятно, что есть UB, разные сложные кейсы при компиляции. Но код тривиальный, 5 строк, обьявление, цикл, добавление, возврат, а с -O0 не пашет.
Levon
Что значит «имеет право» в данном контексте? Типа все что посчитает нужным сделать сделает?
Anatoly
задавай вопросы в @supapro.cxx, получай знания абсолютно бесплатно.
Levon
Ок, понятно
Billy
Anton
std::vector<Employee> parseResponse(const xmlNodePtr root) {
std::vector<Employee> result;
for (xmlNodePtr node = root->children; node != nullptr; node = node->next) {
if (xmlNodeHasName(node, "AdEmployee")) {
result.push_back(parseEmployee(node));
}
}
return result;
}
Anton
Примерно так, с O0 в assembly видно что массив инициализируется на каждой итерации цикла, с O1 только 1 раз до цикла... clag, llvm.
Anton
пардон, вектор
Anton
Окей, да в том то и беда что сразу пошел написал тест тривиальный и все работает как и ожидалось. А в целевом проекте беда.
Berkus
Berkus
Berkus
+
Anton
Самое смешное, что если например после объявления вектора сделать какой-то сайд эффект, например std::cout « "Hello"; то в assembly все генерится как и ожидалось, даже с O0
Berkus
Anton
Нет это plain struct с примитивными типами внутри, интами и булом
Berkus
так, там clang какой версии?
Anton
Apple LLVM version 9.0.0 (clang-900.0.37)
Berkus
https://godbolt.org/g/NwE8Ux тут генерится нормально
Berkus
допинай пожалуйста этот пример до ошибки