= default;
можно писать, если у вас нет никакого списка инициализации. И константную ссылку нельзя использовать для инициализации неконстантной.template<typename T>
struct Test
{
T& ref; // нужно присвоить null
Test(T& _ref) : ref(_ref) {};
};
то в первом пункте мне не понятно как связаны индексы i и 2*i
mov eax, dword ptr [rax + 4*rcx]
в варианте с индексами используется инструкция mov eax, dword ptr [rax]
для указателей. Это самое "складывание с указателем массива" вообще не отдельная операция - а вариант адрессации в инструкции mov. Они могут вообще одинаковое количество тактов занимать, это надо мануал по конкретной архитектуре процессоров читать. Надо ли учить Си? Или может лучше начать с C#, а дальше уже выучу C++?уже три разных языка.. мое мнение - если хватит азарта, учите все ;)))
operator+
с int.operator+
с каким-то streamoff, а с int - ничего нет. Там, правда, не указано, что есть опретор преобразования к int, так что это, наверно, тоже лучше не использовать. for (int i = 0; i < 8; ++i) result |= byte_array[i+1] << (8ULL*i);
или for (int i = 0; i < 8; ++i) result |= byte_array[i+1] << (8ULL*(7-i));
&result
. rewrite
из шаблона search
.rewrite
вверх, до специализации search
, то все скомпилируется. Или надо где-то выше первого использования шаблона rewrite задекларировать специализацию (что ваш закомментированный код и делает).Specialization must be declared before the first use that would cause implicit instantiation, in every translation unit where such use occurs:
using Array<int>;
fopen_s
внезапно не сможет открыть файл и вернёт ошибку. Допустим, файла не существует, или на его открытие нет прав у пользователя. Ты же не проверяешь возврат результата из функции открытия и пытаешься что-то записать в F, даже если функция не смогла открыть файл и вернула ошибку. А когда она вернёт её, переменная F останется нулевыем указателем или, в первом твоём случае, вообще будет обращение к неинициализированной переменной, где ты получишь неопределённое поведение. Вот оно и ругается на эту ветку развития событий.using Array<T>::_size;
using Array<T>::_capasity;
using Array<T>::_data;
Non-dependent names are looked up and bound at the point of template definition. This binding holds even if at the point of template instantiation there is a better match:
this->
или через using
или через Array<T>::
.