c++ - 为什么 std::is_assignable 不适用于原始类型?(确认)
问题描述
更具体地说,为什么要
std::is_assignable_v<int, int> << '\n';
退货false
?是因为 int 没有重载的赋值运算符(作为原始类型和所有类型)吗?
(顺便也std::is_trivially_assignable_v<int, int>
给false
了。)
请注意, this:
struct Structure {};
std::is_assignable<class Structure, class Structure>::value;
将返回true
,因为为 隐式定义了重载的赋值运算符Structure
。
到目前为止我是正确的吗?如果是这样,那么我认为增强is_assignable
以接受原始类型也不是一件容易的事吗?否则,对这种可能的解决方法有任何提示吗?
解决方案
int
不能将 分配给int
。如果您int&
改为作为第一个参数传递,那么正如预期的那样,两者is_assignable
都is_trivially_assignable
返回true
。
#include <type_traits>
int main()
{
static_assert(!std::is_assignable_v<int, int>);
static_assert(std::is_assignable_v<int&, int>);
static_assert(!std::is_trivially_assignable_v<int, int>);
static_assert(std::is_trivially_assignable_v<int&, int>);
return 0;
}
一个不那么直观的部分——is_assignable_v<mytype, mytype>
正确是因为mytype{} = mytype{};
也有效,只有is_assignable_v<mytype const, mytype>
错误。
推荐阅读
- reactjs - 反应最终形式 - 验证返回键和值而不是字符串
- reactjs - Axios - 刷新令牌循环
- postman - 如何禁用邮递员应用程序的自动更新
- c++ - std::async 线程中的成员变量
- post - Loopback POST 条目数组?
- authentication - 用于登录 Cloud Run (GCP) 上的节点 api 的标头中的 JWT
- node.js - 我是否需要在前端应用程序和 Firebase 数据库之间再增加一层安全性?
- c# - 来自 Excel 工作表的 C# 变量
- python - Safari 中的文本框没有从 Selenium+Python 脚本中获取整个字符串
- c# - 如何使用 Mapster 映射自引用?