- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
is_convertible
和 is_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/
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: What is the difference between is_convertible is_assign
我正在努力适应一些 tmp 概念。 这是检查 2 种类型是否可分配的一种解决方案:这是最重要的部分: template class __is_assignable_helper: public __s
刚刚来自is_assignable and std::unique_ptr . @Angew 告诉我,因为 std::unique_ptr和 std::unique_ptr是不同的类型,所以 stat
这是 std::is_assignable 的实现,我花了几个小时试图了解它如何静态地找出模板化对象的类型,但没能成功。 在标准中is_assignable指出分配的两边都转换为 std::add_r
is_convertible 和 is_assignable 有什么区别? 为什么, 在 vs2012 中 is_convertible is false is_assignable is true
Here是来自 gcc 的测试文件,live demo struct do_nothing { template void operator()(T*) {} }; int main
std::is_assignable::value == false在一致的实现中(例如 clang/libc++、gcc/libstdc++,但不是 VS2012)。 直觉上,这意味着像 int x
我在尝试使用 std::is_assignable 进行推断时遇到了一个小问题 我的代码: #include #include class Object{}; enum my_conv { s
更具体的原因 std::is_assignable_v 也给出了 false。) 请注意: struct Structure {}; std::is_assignable::value;会返回 tr
给定两个非常简单的类: class X { }; class Y : public X { }; 为什么会这样,使用 Clang 和 GCC targeting C++14 , std::is_ass
希望问题从问题中显而易见:)如果不是,请考虑以下代码: template class test { public: test(std::string &v) : val(v) {}
我想弄清楚如何在 is_assignable 的实现中解释 declval() = declval()。 declval 将类型转换为引用。鉴于此,我将表达式转换为以下四种可能性之一: _Dest&&
正如预期的那样,以下代码 does not compile . #include #include int main() { using T = std::pair; const
以下表达式使用 is_assignable返回 true使用 gcc 4.7 和 boost 1.49 时: typedef boost::function F; std::is_assignable
在 VS2017 中切换到 LLVM 工具集以使用 Boost 1.68 构建代码时,我收到以下构建错误。使用 MSVC 编译器可以很好地构建代码。 1>C:\boost_1_68_0\boost/t
我是一名优秀的程序员,十分优秀!