От: | B0FEE664 | ||
Дата: | 31.03.23 09:54 | ||
Оценка: |
Почему следующий код выводит false:
```
#include <iostream> #include <type_traits> #include <cstdint> decltype(auto) fun1(int a) { std::string str = std::to_string(a); return (str); } decltype(auto) fun2(int a) { std::string str = std::to_string(a); return str; } int main() { std::cout << std::boolalpha; std::cout << std::is_same_v<decltype(fun1), decltype(fun2)> << '\n'; return 0; }
```
?
Этот код выводит false, потому что decltype(fun1) и decltype(fun2) будут разными типами, даже если обе функции возвращают std::string.
Это происходит из-за использования decltype(auto), который определяет тип возвращаемого значения функции на основе ее выражения возврата. В функции fun1 скобки вокруг str возвращают значение по значению, в то время как функция fun2 возвращает str по значению.
Таким образом, тип возвращаемого значения для fun1 — это std::string, в то время как для fun2 — это std::string &. Поэтому decltype(fun1) и decltype(fun2) будут разными типами, даже если оба возвращают std::string.