Constantine
потому что если inline-подстановка фактически не выполнена, объектник экспортирует функцию и все пойдет как надо
Constantine
а если выполнена, то будет ошибка линковки из-за отсутствия использованной функции
Constantine
я не знаю, что там с inline-переменными из 17 стандарта
Constantine
ах да, еще стандарт гарантирует, что inline-функция в разных TU имеет одинаковый адрес
Matwey
зачем ей вообще адрес?
Constantine
чтобы его взять
Berkus
ну и по следствию... он должен быть
Constantine
то же, что и с любой другой функцией
Berkus
Constantine
в частности, чуть что не так - все сломается, но если не тайпкастить все окнорм
Constantine
при этом взятие адреса функции является чудесным случаем, когда результат оператора зависит от типа, которому будет присваивание :)
Constantine
об этом есть много букав под названием "address of overloaded function"
Constantine
причем этот раздел плачет еще по некоторому набору букав
Matwey
https://github.com/trailofbits/remill
а из этой штуки получится сделать статический бинарный транслятор? если LLVM потом пропустить опять в прямом направлении под другую архитектуру?
Berkus
llvm bitcode есть нескольких уровней
Berkus
если это более высокого уровня биткод, то должно получиться, поиграйся, это можно обычными llvm тулами сделать
Andrei
А еще такой вопрос по inline.
Объявил я функцию класса как inline в .hpp, а определил в .cpp. Код не компилируется в таком случае, хотя при компиляции код функции создается.
А если я эту же функцию в том же .cpp, где она определена, где-то использую, то и в других местах кода я могу ее использовать.
Как это работает?
Andrei
А то не могу допереть даже момент с простым определением в отдельном файле. Почему компилятор не видит. Какая разница где функция определена, пусть она и inline помечена. Тем более, раз это только рекомендация
Matwey
Так встраивание же происходит и на этапе компиляции?
Matwey
Ну я имею ввиду, что нам обещают, что потом оптимизатор еще и по АСТ проедет вслед.
Matwey
Это утром обсудили уже
Matwey
Andrei
вопрос именно "почему":)
Matwey
А это по-моему не он
Andrei
я другой
Matwey
Можно вроде, но inline будте работать только в этой единице трансляции. Разве нет?
Andrei
из-за ваших обсуждений и возник вопрос
Andrei
ладно, если не будет работать инлайн, так в других .cpp при подключении хедера не видит функцию и вообще не компилируется
Berkus
auto main() { auto auto; return auto; }
Matwey
Это тоже обсудили утром. Решили, что если в заголовках пишешь тело функции вне определения класса, нужно писать inline, чтобы линкер смог потом слинковать разные единицы трансляции с одинаковым символом.
Andrei
///foo.hpp
#ifndef foo_h
#define foo_h
class Foo
{
public:
inline void foo();
};
#endif /* foo_h */
///foo.cpp
#include <iostream>
#include "foo.hpp"
void Foo::foo()
{
std::cout « "Foo::foo()" « std::endl;
}
///main.cpp
#include "foo.hpp"
int main()
{
Foo foo;
foo.foo();
return 0;
}
Ошбика при компиляции: "Foo::foo()", referenced from:
_main in main.o
Andrei
а если добавить в foo.cpp например такой кусок:
void bar()
{
Foo f;
f.foo();
}
То все компилится и линкуется
Andrei
xcode/clang
Square
На ios не делается :(
Square
Ну тут есть 5 видов апострофов и ни один не подходит
Dima
Andrei
как их тут добавить?
Square
У Полухина про инлайны есть доклад
Square
И там почти так и сказано - забудьте
Square
И в принципе прально
Constantine
Square
Д
Andrei
Berkus
Berkus
Square
Square
если чо, с 32й минуты сабж
Berkus
ааа, это я смотрю, не досмотрел до 32 минуты еще
Berkus
спс
ttldtor
Эх, прошли те времена, когда из яндекса вываливались артефакты классиков типа Mtroka/Stroka ... а не, нашёл
https://github.com/yandex/balancer/blob/master/util/generic/stroka.h
Крылатый
> stroka::compare
ttldtor
блин, не Mtroka, а Wtroka
ttldtor
это я в контексте первых минут видео...
ttldtor
https://github.com/yandex/balancer/blob/master/util/generic/stroka.h#L43
Berkus
запустить vim? поставить CLion? куча вариантов
Anatoly
узнаю руку Мастера! :)))
Evgenii
надо было ставить линукс.jpeg
Andre
Andre
не благодари
Evgenii
ну а в чем проблема тогда?
Evgenii
ну и фиг с ней
ep
ну и фиг с ней
Отличный совет вообще.
Представьте, что у вас такая ситуация, будет не до смеха.
Я сталкивался с чем-то подобным. Кривой устновщик расширения ломал студию. Мы долго что-то вычищали руками, и оно всё же заработало. Но я совершенно не помню, что и где надо править.
Студия довольно капризная, если её что-то сломало, бывают ситуации когда помогает только переустановка винды, реально. Переустановка студии не помогает.
Evgenii
Anatoly
Ильюха, я не знаю как тебе помочь
Anatoly
Constantine
Berkus
Anatoly
"Узнаю руку Мастера" (с) мой :)
Nikolai
ухахаха
Stanislav
шо ты там делаешь
Stanislav
вот понмю времена XP студия не ставилась, потому что не ставился .net framework, который с свою очередь не ставился из за отключенных обновлений
Stanislav
подозриельна, заводил под вин 10 годовалой давности 2012 студию поверх 2015, юзал тулчнейн 2012 из 2015
Anonymous
Admin
Крылатый
Anonymous
В первый раз вижу админов в этом чате
Крылатый
Тут их полчата.