- 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/
假设我没有 std::is_convertible无论出于何种原因,并想自己实现。该标准说明了以下内容: The predicate condition for a template speciali
我遇到了 an implementation std::is_convertible 并且对他们为什么要测试可返回性感到困惑。以下是整个实现的摘录。为什么要将 nullptr 转换为指向返回类型 T
根据 cppreference , std::is_convertible应该表现得好像以下虚函数是良构的: template To test() { return std::declval
我创建了以下特征模板类来确定是否可以将一种类型转换为另一种类型: namespace Detail { struct IsConvertible { template
是否可以编写 std::is_convertible 的可变版本?例如are_convertible会返回 is_convertible && is_convertible .我已经考虑了几个小时,但
使用 std::is_convertible : bool i2c = std::is_convertible::value; bool c2i = std::is_convertible::valu
is_convertible 和 is_assignable 有什么区别? 为什么, 在 vs2012 中 is_convertible is false is_assignable is true
所以我想在模板类型boost::is_convertible时应用特定代码至 WellKnownType : template class Foo { public: Foo() {
在 C++11 中,可以通过 using std::is_convertible 确定类型 A 的变量是否可以隐式转换为类型 B . 如果你真的知道类型 A 和 B,这很有效,但我只有 type_in
这两个模板似乎产生相同的结果。有什么区别,我们什么时候应该使用哪个? using namespace std; class A { }; class B : public A { }; class C
当涉及 std::function 对象和 std::bind 时,我注意到 std::is_convertible 和 std::is_assignable 有一些奇怪的结果。 我假设当这些函数返回
我有以下代码: #include #include template ::value, T>::type> void func(T a) { std::cout ::value, T>::
我有一个 vector std::type_index ,表示特定节点具有的特征类型。我正在实现一个函数来检查节点是否支持特定类型。它看起来像这样: std::vector traits; ... t
我正在努力理解 std::is_convertible在 C++11 中。根据cppreference.com , std::is_convertible::value当且仅当“如果类型为 T 的虚数
template::value && is_constructible::value>, enable_if_t::value
我有 auto result = std::is_convertible , bool >::value; static_assert( result , "task sho
我是一名优秀的程序员,十分优秀!