gpt4 book ai didi

c++ - 为什么 std::is_assignable 不适用于原始类型? (确认)

转载 作者:太空狗 更新时间:2023-10-29 23:38:50 26 4
gpt4 key购买 nike

更具体的原因 std::is_assignable_v<int, int> << '\n';返回 false ?是因为 int 没有重载的赋值运算符(是原始类型和所有类型)吗?

(顺便说一句 std::is_trivially_assignable_v<int, int> 也给出了 false。)

请注意: struct Structure {};
std::is_assignable<class Structure, class Structure>::value;
会返回 true ,因为为 Structure 隐式定义了重载赋值运算符.

到目前为止,我是否正确?如果是这样,那么我认为增强 is_assignable 并非易事也接受原始类型?否则,对于这种可能的解决方法有什么提示吗?

最佳答案

int不能分配给 int .如果你通过 int&作为第一个参数,然后,正如预期的那样,is_assignableis_trivially_assignable返回 true .

cppreference , godbolted

#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>是假的。

关于c++ - 为什么 std::is_assignable 不适用于原始类型? (确认),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52429417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com