После вызывается конструктор, которые добавляет указатель на мой скрипт в общий контейнер:
Register::Registry::RegisterActorWithComponent
- это не конструктор. Это метод.main
вызывается этот метод. std::cout << Bacteria::Print
.Bacteria::Print
? С учетом еще одного приведения - prvalue. А тип - указатель на функцию.почему, если вывести адрес указателя и адрес функции, у первого будет 16-ричная, возможно 16-циферное число, то тут просто один?
int (*)()
. Подходящей перегрузки operator <<
для такого типа аргумента нет. А самой ближайшей перегрузкой с учетом неявного преобразования будет перегрузка для булева значения, которая и пишет нолик/единичку. Учитывая что адреса функций всегда определены, std::cout << Bacteria::Print
сведется к std::cout << true
. m = {1, 2, 3, 4, 5};
Vector& operator=(const init_l<T>& l)
, то в него будет передано размещение именно локального временного, правда с пометкой иммутабильности.Vector& operator=(const init_l<T> l)
, то локальный временный будет использован для инициализации аргумента оператора, с которым тело оператора и продолжит работать дальше._NODISCARD auto operator[](const size_t pos) const
- это не просто перегрузка оператора. Это обобщение перегрузки оператора. А обобщения в языке работают очень близко к шаблонам. У них упрощенная механика, сродни обобщениям в Яве или Шарпе. Это надо читать как семейство семантически близких функций.name
и есть варианты, которая name
тут имеется в виду - то предполагать один из вариантов, даже со стопроцентной уверенностью, не стоит.MyStruct::name = name;
из примера автора. И это является качественным примером, т.к. переключение между UNL и QNL является одним из приемов качественного кода. Не в случае кода у автора, но в огромном наборе других случаев. struct Test {
int val = false;
const int& get_val(bool good, const int& default_value) const
{
return (good)? val : default_value;
}
};
get
, но возвращаешь ссылку на переменную. Написанное не соответствует смыслу. Если get
, то ссылка на константу. Если ссылка на переменную, то access
.get
всегда подразумевает константный контекст, поэтому const
для метода строго обязателен. Иначе снова написанное не соответствует смыслу.
Сейчас ты не просто опустил в тексте важную информацию, а буквально выкинул ее для себя из внимания.
А это значит что ты обречен на рецидив проблемы. В следующий раз она снова для тебя станет нерешаемой и снова потому что ты отказался от важных деталей проблемы.
Поэтому лучше будет поменять текст вопроса и добавить важную деталь, на которую я сослался.
У меня совсем не было бы к тебе вопросов, если бы ты написал имена файлов, в которых находятся обозначенные у тебя глобалы, привел бы выражения инициализации этих глобалов и показал конструкторы типов этих глобалов.
Для меня это бы означало что ты увидел проблему целиком.