提问人:myoldgrandpa 提问时间:9/4/2023 最后编辑:HolyBlackCatmyoldgrandpa 更新时间:9/13/2023 访问量:35
为什么 '''is_assignable_v<int, int>''' 和 '''is_assignable_v<int&, int>''' 有不同的结果?
Why does the ```is_assignable_v<int, int>``` and ```is_assignable_v<int&, int>``` have different result?
问:
为什么 和 有不同的结果? 返回 true,但返回 false。这不是很直观。is_assignable_v<int, int>
is_assignable_v<int&, int>
is_assignable_v<int&, int>
is_assignable_v<int, int>
is_assignable_v
根据定义,来自 cppreference.com。
这意味着,返回 false 但返回 true。std::declval<T>() = std::declval<U>()
std:declval<int>() = std::declval<int>()
std:declval<int&>() = std::declval<int>()
std::declval<int>()
是 int 的右值。那是什么意思呢?如果它意味着对右值 int 的引用,那么是否可以引用没有 const 的 int 可以引用右值?std::declval<int&>()
我完全困惑.
你能为我解释一下吗?is_assignable_v
答:
1赞
HolyBlackCat
9/4/2023
#1
std::declval<int>()
的右值为 。那是什么意思呢?int
std::declval<int&>()
Lvalue ,由于引用折叠。int
对于标量类型,只能赋值给左值,而不能赋值为右值。对于类,默认情况下也可以赋值给右值,除非您有意阻止这样做。
请注意,不能通过分配给引用来重新定位引用,而是分配给引用指向的任何内容。
另请注意,表达式不能有引用类型,因此尝试赋值给“引用”与尝试赋值给左值(或右值)没有什么不同。int
int
评论