16.07.2010, 09:03. Просмотров 2048. Ответов 30
возникло несколько вопросов, с которыми что то не могу никак разобраться
1. Как происходит выравнивание при создании структуры?
C++ |
1
2
| struct { double a; int b; char c;};
struct { char a; int b; double c; }; |
|
ведь должны возвращать разный размер? В первом всё достраивается до double, а во втором сначала до int, потом до double? Но тем не менее, проверив в двух компиляторах(в VS2005 и bcc5.5) я получил результат и там и там 16(double=8), который никак не могу понять
2. Про добавление константности
пусть есть класс:
C++ |
1
2
3
4
5
6
7
8
9
10
11
| class A {
public:
A() {}
A(const A&) { printf("Copy constructor called\n"); }
void doSmth() { printf("Non-const method called"); }
void doSmth() const { printf("Const method called"); }
};
...
A a;
a.doSmth();
(static_cast<const A>(a)).doSmth(); |
|
т.е. хочу вызвать константный и неконстантный методы. Но с константным и начинаются проблемы.
C++ |
1
| static_cast<const A>(a) |
|
почему то игнорируется, результат этой конструкции -- класс А(проверял через typeid). Не могу понять почему? Если поставить приведение к ссылке - всё будет работать, оно и понятно - мы просто сообщаем компилятору, что в этой конструкции адресуется объект типа "const A", но почему не срабатывает простое приведение? Я считал, что в этом случае, будет создаваться временный объект нужного типа, но судя по тому, что копирующий конструктор не вызывается, этого не происходит. Почему?