Constantine
просто слово inline изначально означало просьбу сделать что-то и её последствие для линковщика
Constantine
просьбу что-то сделать компилятор может игнорировать
Constantine
последствие для линковщика и есть значение слова inline
Nikita
просто смысл который я написал был почерпнут у страуструпа помоему
Nikita
и очень прочно засел в голове
Constantine
есть __forceinline, обычно означает что-то вроде "варнинг если не инлайнится"
Anonymous
бля
Constantine
в любом случае, к С++17 решили, что нужно считать слово "inline" именно словом для линковщика
Constantine
и добавили inline переменные
Nikita
inline это переключить режим линковки с "реализовано в одном, возможно, экспортируется наружу" в "реализовано в каждом, кто использует"
т.е. если я пишу код на C++11/14/17 и когда пишу inline (для функций) в голове буду думать вот это, то буду прав?
Constantine
т.е. если я пишу код на C++11/14/17 и когда пишу inline (для функций) в голове буду думать вот это, то буду прав?
вы просто пишете inline для любой функции, которая не является constexpr и по какой-то причине реализована в .h файле
Nikita
понял
Nikita
спасибо
Constantine
понял
вы должны были задать вопрос, почему constexpr
Nikita
потому что видимо для constexpr его писать не нужно, такие функции должны быть и так в h?
Constantine
(правильный ответ: потому что constexpr сразу подразумевает inline)
Nikita
so close))
Constantine
а, еще не нужно писать в случае struct some { int f() {} };
Constantine
если member function реализован в определении класса, он тоже inline сразу
Constantine
?
Nikita
и inline в том же смысле в каком и свободная функция да?
Constantine
и inline в том же смысле в каком и свободная функция да?
ну определение класса с такой функцией можно подключить куда угодно
Constantine
при этом линковщик НИЧЕГО НЕ ОБЕЩАЕТ В РАМКАХ ПРОВЕРОК
Constantine
в частности, не реализовать inline функцию это нестабильный CE
Nikita
1. шо цэ такэ СЕ 2. есть ли гарантия что код заведётся?
Constantine
//some.h struct some { int f(); }; //some.cpp inline int some::f() { } //other.cpp int main() { some s; s.f(); //может скомпилируется, может нет }
Constantine
CE это JAVA для compilation error
Nikita
при этом линковщик НИЧЕГО НЕ ОБЕЩАЕТ В РАМКАХ ПРОВЕРОК
просто это очень страшная формулировка
Nikita
а
Nikita
вот даже так
Constantine
и да, пример выше вне рамок other.cpp полностью корректен - inline для функции-члена класса может быть указан при реализации без указания в объявлении
Constantine
но это тонкости
Nikita
т.е. можно сделать вывод, что код, приведённый выше это что то вроде compile-time UB и так писать не следует?
Nikita
ну или link-time
Nikita
не суть
Constantine
скажем так, нужны какие-то серьезные мотивы так делать
Constantine
это ill formed, no diagnosis is required
Constantine
как и в случае ODR violation
Constantine
т.е. программа некорректна, но компилятор не обязан это проверять
Nikita
спасибо
Nikita
и стало быть для шаблонных функций inline смысла не имеет?
Anatoly
и стало быть для шаблонных функций inline смысла не имеет?
не имеет, но имеет для полных специализаций: template<typename T> void foo() {} template<> inline void foo<int>() {}
Nikita
и смысл будет как у нешаблонной функции?
Nikita
пасиб)
Nikita
ребят, а в cmake нельзя как нибудь задать параметры линковки для конкретной цели во время вызова cmake?
ed
std::vector.pop_back() - вызывает деструктор элемента?
Liubomyr ✙
http://www.cplusplus.com/reference/vector/vector/pop_back/
Nikita
посмотри set_target_properties для LINK_FLAGS
спасибо, но я не это имел в виду эта команда используется внутри CMakeLists, а я имел в виду указать параметры во время вызова cmake, как например -DCMAKE_CXX_FLAGS="... надобность уже отпала, но на будущее было бы полезно узнать
Angelina
Всем привет! Не могли бы посоветовать хороший курс по c++?
ed
http://www.cplusplus.com/reference/vector/vector/pop_back/
Да я б не стал писать если бы не смущала формулировка.. Во первых все мы знаем что элемент не куда не девается на самом деле (кол-во занятой памяти не уменьшается), и там просто уменьшается переменная занятых элементов.. Но вопрос не в этом, делается ли там вот так - data[x].~Type(); или нет? Посмотрел бы в исходниках, но лезть далеко..
ed
Окей, спасибо.
Constantine
В one love MSVS это делается очень быстро
Nikita
читать сорцы stl такое себе занятие
Constantine
читать сорцы stl такое себе занятие
за такие слова можно и в супапро)
Constantine
нет ни одной причины не читать сорсы стл
Nikita
убогие имена?
Constantine
что не так в именах?
Nikita
______________________________________________-
Constantine
потому что для резервированных имен они должны использовать _A или __ ?
Nikita
такое ощущение что чем больше подчёркиваний тем лучше
Ostap ꑭ
__M_instance.__method_name()
Constantine
но факта то не отменяет
вы точно профессиональный разработчик C++? :)
Constantine
__M_instance.__method_name()
угу, ибо выбора нет
Nikita
никогда себя таковым не называл
Ostap ꑭ
угу, ибо выбора нет
После читания Сишки это выглядит очень неплохо
Constantine
Что тут вообще непонятного
Nikita
orphan_range мне лично непонятен
Constantine
Constantine
штука для отладочной проверки итераторов
Constantine
мне вот первое, что бросилось в глаза - а зачем проверяется, что идет внутреннее перемещение элемента?
Nikita
это где