2015-03-01 9 views
-1

Может, пожалуйста, скажите, почему компилятор не позволяет этого типа бросание ... Ошибка компилятора является показ «Invalid static_cast от поплавка * до * Int»Выполнение оператора static_cast и это ограничивает

#include<iostream> 
using namespace std; 
int main() 
{ 
    float f=45.678; 
    float *a; 
    a=&f; 
    int *d; 
    cout<<static_cast<int *>(a); 
} 
+0

Возможный дубликат [C++: не может статический \ _cast от double \ * to int \ *] (http://stackoverflow.com/questions/2473628/c-cant-static-cast-from-double-to -int) – Scis

+2

Почему * должен * разрешить приведение? –

+0

Поскольку литье предназначалось для преобразования между различными типами данных ... @ christian hackl – virusai

ответ

1

static_cast литая что делает проверку времени компиляции, если актерский состав является законным.

Рассмотрим следующие примеры, когда приведение правовой:

  • литья меньшего размера подписал/целое число без знака типа для большего размера подписал/целое число без знака типа с
  • Приведение к базовому типу указателя на производный класс указателю на базу класс.
  • и так далее.

Отливка float* на int* не имеет смысла с точки зрения компилятора. Если вы хотите сделать такое преобразование, вы должны использовать reinterpret_cast.