Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
// Библиотека
class Container
{
public:
unsigned count (); // не const
};
// MyModule.cpp
class MyContainer : public Container
{
public:
void process () const
{
for (unsigned i = 0; i < count (); ++i) // Нельзя использовать не-const count()
{...}
}
};
// Библиотека
class Container
{
public:
unsigned count (); // не const
};
// MyModule.cpp
class MyContainer : public Container
{
public:
void process () const
{
for (unsigned i = 0;
i < (const_cast<MyContainer*>(this))->count (); // Приводим this к не-const типу
++i)
{...}
}
};
int i(1); это определение переменной i типа int и инициализация её значением 1. Читайте 8.5/1.class A
{
public:
A(int i) {}
};
class B
{
public:
B(int i, int j) {}
};
int main()
{
A a1 = 1;
A a2(2);
int i1 = 1;
int i2(2);
B b1(1, 2);
}Type t = Initializer;, поэтому такую же инициализацию разрешили для пользовательских типов, если есть конструктор, принимающий один аргумент (см. класс A). Для пользовательских типов инициализация вида Type t(InitializerList); универсальна (см. классы A и B), поэтому для однообразности есть возможность инициализировать точно так же и экземпляры встроенных типов.
char const *pch;
(2) (1)(0)
<------------
char* const cpch;
(2) (1) (0)
<------------
Многоликий const