gpt4 book ai didi

c++ - is_convertible is_assignable 有什么区别

转载 作者:IT老高 更新时间:2023-10-28 21:47:57 25 4
gpt4 key购买 nike

is_convertibleis_assignable 有什么区别?

为什么,

在 vs2012 中

is_convertible<int, int&> is false

is_assignable<int, int&> is true

在 gcc4.7.2 中

is_convertible<int, int&> is false

is_assignable<int, int&> is false

最佳答案

一个区别是论点是相反的。

is_convertible<From,To>表示 From 类型的表达式可以转换为类型To .标准根据返回 To 的函数来定义这一点。包含一行 return create<From>();在哪里 create<From>()返回对 From 的引用.所以is_convertible<int,int&>是假的,因为你不能绑定(bind) rvalue int到非 const lvalue 引用 int& .

is_assignable<T,U>表示 U 类型的 rvalue 表达式可以分配给 T 类型的表达式;也就是说,t = u;格式良好。如果 T 则将要分配的表达式指定为返回 左值 引用的函数调用。是 lvalue 引用,否则是 rvalue 引用。这意味着 is_assignable<T,U>仅当 T 为真是非 const lvalue 引用类型;因此对于 <int,int&> 是错误的.

我猜 VS2012 要么允许赋值给 xvalues,要么对 is_assignable 使用非标准检查。 ,给出我认为不正确的结果。

请注意,一般来说可转换并不意味着可赋值,因为可能没有可访问的赋值运算符;并且 assignable 并不意味着可转换,因为可能存在赋值运算符但没有可访问的转换构造函数或运算符。

关于c++ - is_convertible is_assignable 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13952404/

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