为什么
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
。
你能给我解释一下吗?
是std::declval<int>()
的右值。那么int
是什么意思?std::declval<int&>()
左值
int
,由于参考崩溃。
请注意,引用不能通过分配给它们来重新定位,而是分配给引用指向的任何内容。
另请注意,表达式不具有引用类型,因此尝试分配给“对
int
的引用”与尝试分配给左值(或右值)int
没有什么不同。