Разница между обозначениями функционального приведения T(x) и static_cast(x)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Разница между обозначениями функционального приведения T(x) и static_cast(x)

Сообщение Anonymous »

(Я знаю, что это очень похоже на некоторые другие вопросы здесь, но я не нашел ни одного конкретного, лингвистического ответа, на эту точную деталь. Большинство почти дубликатов просто спрашивают, следует ли им использовать static_cast вместо функционального приведения (ответ: да) или разницу между static_cast и C-стилем.)

В C++ следующие два приведения кажутся очень похожими:

Код: Выделить всё

template auto convert1(U&& u) {
return T( std::forward(u) );
}

template auto convert2(U&& u) {
return static_cast( std::forward(u) );
}
Есть ли какая-либо разница для любых типов T, U; или по сути они на 100% идентичны?

Если они разные, я был бы признателен за несколько примеров мест в Стандартной библиотеке, где небольшая разница важна. (Я имею в виду, например, как указано, что std::make_shared(args...) создает свой объект с помощью T(args...) вместо T{args... из-за тонкой разницы между T() и T{}.)

Подробнее здесь: https://stackoverflow.com/questions/456 ... tic-casttx
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»