为什么 ```is_assignable_v<int, int>``` 和 ```is_assignable_v<int&, int>``` 有不同的结果?

问题描述 投票:0回答:1

为什么

is_assignable_v<int, int>
is_assignable_v<int&, int>
有不同的结果?
is_assignable_v<int&, int>
返回 true,但
is_assignable_v<int, int>
返回 false。不是很直观。

根据

cppreference.com

 的定义,
is_assignable_v
std::declval<T>() = std::declval<U>()。 这意味着,
std:declval<int>() = std::declval<int>()
返回 false,但
std:declval<int&>() = std::declval<int>()
返回 true。

std::declval<int>()
是 int 的右值。那么
std::declval<int&>()
是什么意思呢?如果它意味着引用右值 int,那么是否可以引用不带 const 的 int 来引用右值?

我完全困惑

is_assignable_v
。 你能给我解释一下吗?

templates c++17 typetraits
1个回答
0
投票

std::declval<int>()
int
的右值。那么
std::declval<int&>()
是什么意思?

左值

int
,由于参考崩溃

请注意,引用不能通过分配给它们来重新定位,而是分配给引用指向的任何内容。

另请注意,表达式不具有引用类型,因此尝试分配给“对

int
的引用”与尝试分配给左值(或右值)
int
没有什么不同。

© www.soinside.com 2019 - 2024. All rights reserved.