Передача функции ссылку переменной. static_cast<>. C++

121
18 августа 2019, 04:10

1) Насколько я знаю, static_cast<> создает копию переменной но уже в другом формате. Вот код

// 1
int x (7);
float y = 200/static_cast<float>(x)
// 2
float *xClone = new float(7);
floay y = 200/xClone;
delete xClone;

Чем static_cast эффективнее и насколЬко?

2) допустим, мне надо поработать с какой то переменной в функции типа void. Я отправляю туда ссылку на эту переменную. Создается копия этой переменной или функция напрямую работает с моей переменной которую я отправил в функцию?

Answer 1
  1. Эффективнее очень намного. Потому что выделение памяти для одного действия - это их пушки по воробьям!

А вообще - не морочьте голову ни себе, ни людям :) и пишите

float y = 200.0/x;

Кстати, все равно ваше

floay y = 200/xClone;

не скомпилируется - из-за неверного типа и того, что на указатель делить нельзя :)

  1. Работает напрямую с переменной.

  2. Не задавайте совершенно разные вопросы в одном...

Answer 2
int x (7);
float y = 200/static_cast<float>(x)

Равнозначен такому коду:

int x (7);
float __tempor = x ;  
float y = 200/__tempor;

Переменная __tempor как и все локальные переменные могут хранится в стеке или в регистрах процессора, как оптимизация всё провернула. При выделении памяти в куче происходит торможение всех остальных нитей для организации выделения памяти. Далее в программе когда потребуется значение переменной, будет постоянно требоваться доступ этой ячейке памяти (оптимизация не поможет, так-как другие нити могли изменить значение). А если переменная локальная, то всё будет под контролем компилятора (и место хранения и оптимизация).

READ ALSO
Что такое *this?

Что такое *this?

Возвращаю *thisА что такое *this

128
Вывод в поток данных при выполнении условий (использование тернарной операции)

Вывод в поток данных при выполнении условий (использование тернарной операции)

Подскажите можно ли как-то записать в 1 строчку следующий код:

115
Как работает union? [дубликат]

Как работает union? [дубликат]

На данный вопрос уже ответили:

133
Зачем нужен флаг /EHsc для MSVC компилятора?

Зачем нужен флаг /EHsc для MSVC компилятора?

Зачем нужен флаг /EHsc для MSVC компилятора? Недавно увидел его в конфиге, почитал доки, но так и не понял о каких синхронных/асинхронных исключениях...

106