Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Явное приведение типов в стиле Си и С++ [дубликат]

#cpp


        
             
                
                    
                        
                            На этот вопрос уже даны ответы здесь:
                            
                        
                    
                
                        
                            static_cast и (int) - это одно и то же?
                                
                                    (3 ответа)
                                
                        
                                Закрыт 2 года назад.
            
                    
Узнал о способах явного приведения типов в С++ и не совем понял чем static_cast  (p) отличается от (int *) p к примеру... Допустимо и то и то - а в чем разница не знаю.
    


Ответы

Ответ 1



Разница между (int *) и static_cast в С++ - гигантская. Каст в стиле С, это последовательные попытки применения const_cast static_cast static_cast и потом const_cast reinterpret_cast reinterpret_cast и потом const_cast Какой первый подойдет - тот и применяется. Например, static_cast не позволит вам снять с указателя константность, а обычный С-каст - позволит. const int *p = 0; static_cast(p); // Ошибка (int *) p; // OK В дополнение к этому, приведение типа в стиле С может корректно приводить указатель на объект класса вверх и вниз по иерархии даже тогда, когда базовый класс недоступен, т.е. игнорируя private и protected наследование (при условии, что приведение однозначно и нет виртуального наследования) class A {}; class B : A {}; B *pb = 0; static_cast(pb); // Ошибка (A *) p; // OK

Комментариев нет:

Отправить комментарий