std::declval
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
| Defined in header <utility>
|
||
| template< class T > typename std::add_rvalue_reference<T>::type declval(); |
(начиная с C++11) | |
Преобразует любой тип T в ссылочный тип, позволяя использовать его функции-члены в выражениях decltype без явного создания объекта. Это широко используется в шаблонах, в которых параметр шаблона может не иметь в общем случае конструктора по умолчанию, но имеющий функцию-член, возвращающую значение требуемого типа. std::declval может использоваться только в невычислимых контекстах. Вычисление выражения, содержащего эту функцию, является ошибкой.
Содержание |
[править] Параметры
(Нет)
[править] Возвращаемое значение
Не может быть вызвана, следовательно, никогда не возвращает значения. Тип возвращаемого значения — T&&, и T для lvalue-значений.
[править] Исключения
[править] Пример
#include <utility> #include <iostream> struct Default { int foo() const {return 1;} }; struct NonDefault { NonDefault(const NonDefault&) {} int foo() const {return 1;} }; int main() { decltype(Default().foo()) n1 = 1; // int n1 // decltype(NonDefault().foo()) n2 = n1; // will not compile decltype(std::declval<NonDefault>().foo()) n2 = n1; // int n2 std::cout << "n2 = " << n2 << '\n'; }
Вывод:
n2 = 1
[править] См. также
| decltype спецификатор | определяет тип эквивалентен типу выражения (C++11)
Оригинал: defines a type equivalent to the type of an expression (C++11) Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| (C++11) |
Выводит возвращаемый тип при вызове функции (шаблон класса) |

