В шаблонизированных классах нужно явно указывать наследованные члены класса
a = 1;
- это попытка обращения к полю через неквалифицированный доступ.this
для квалификации, хоть это и работает, использовать в таком случае вообще неправильно.using Base<T>::var;
- это операция создания псевдонима поля в локальной области видимости шаблона типа. И это не всегда удобно. И это приведет к проблемам если такое имя уже есть в локальной области шаблона типа или если ты это поле переименуешь в базовом шаблоне. А еще это снова будет сбивать тебя с толку, т.к. в месте работы с полем не будет понимания, откуда это поле взялось.template <class T>
class Derived : private Base<T>
{
public:
using Parent = Base<T>;
Derived() {
Parent::a = 1;
Parent::b = 2;
Parent::c = 3;
}
};
this
вообще?this
оправдано в исчезающе малом количестве случаев.conio.h
не определяет нажатие клавиш на клавиатуре. Эта библиотека дает доступ к чтению потока ввода консоли, который может производиться не с клавиатуры, а из файла или вывода другой программы.conio.h
даст доступ к тому, что не работает.нашел исходники , решил затестить
time
[?]. В системах, которые придерживаются спецификации POSIX, результат можно интерпретировать как количество секунд. Т.е. раз в секунду результат time( nullptr )
будет меняться. Именно это и видно в приведенном тобой листинге.Сумма массива под номером 9 равна 73
Сумма массива под номером 10 равна 76
const
играет большую роль в понимании кода читателем. Something
первые 8 байт отданы на vtable, следующие 4 байта - на int some_field
. Там без padding-а, все верно. Итого получается 12 байт.Something
равно 8 байт, т.к. в его составе есть указатель vtable.return
в ее теле. Все прочие return
обязаны в таком случае возвращать значение точно того же типа.std::function func{ ... };
.std::function<Y ( int )> func{
[]( int z ) -> Y
{
if( z > 0 )
{
return X{};
}
return Y{};
}
};
return
отличается от типа значения верхнего return
.