小编iw.*_*hin的帖子

std :: function不是gcc中的MoveConstructible函数对象

我想要相处std::function.从这里引用可以看出,对std::functionctor的论证应该是可调用的并且可以复制构造.所以这是一个小例子:

#include <iostream>
#include <type_traits>
#include <functional>

class A {
public:
    A(int a = 0): a_(a) {}
    A(const A& rhs): a_(rhs.a_) {}
    A(A&& rhs) = delete;
    void operator() ()
    {
        std::cout << a_ << std::endl;
    }

private:
    int a_;
};

typedef std::function<void()> Function;

int main(int argc, char *argv[])
{
    std::cout << std::boolalpha;
    std::cout << "Copy constructible: "
              << std::is_copy_constructible<A>::value << std::endl;
    std::cout << "Move constructible: "
              << std::is_move_constructible<A>::value << std::endl;
    //Function f = A(); …
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++11

16
推荐指数
1
解决办法
370
查看次数

是否可以在C#中创建System.Int32?

如果你深入了解C#中的值类型,那么编译器/ CLR会非常特别地对待它们.但是CLR内部的类型更加特殊.这就是我的意思:

int a = 5;
int b = 10;
int ? = a + b;
a.CompareTo(b);
Run Code Online (Sandbox Code Playgroud)

您可以将鼠标悬停int在Visual Studio中,看看它实际上是System.Int32struct.没关系.现在你可以抓住ILDasm并查看是什么System.Int32:转换它是一个非常简单的struct,有一个类型的字段int32(这是int32CLR的内部),并且没有重载的运算符用于添加.

那么,这int ? = a + b是如何工作的呢?我再次抓住ILDasm并研究IL.事实证明System.Int32IL代码中没有:编译器自动理解它应该替换它int32.并且IL指令add适用于int32堆栈中的几个.是什么使我感到有趣甚至更多,CLR允许呼叫实例方法System.Int32int32.看起来像是一些黑魔法给我.

所以,这里是纯粹的理论问题:看起来System.Int32像任何其他的类型,它可以用C#以某种方式创建吗?如果可以,你可以用它做任何有用的事情(实际int32领域是私人的)吗?

编辑:好的,为了使它更清楚:这个问题没有关于int别名的问题System.Int32.一个可以提供例如,更换intSystem.Int32和跳过例子后第一段.真正的问题是关于valuetype [mscorlib]System.Int32 a你的IL代码而不仅仅是的可能性int32 a.

c# clr

7
推荐指数
1
解决办法
1440
查看次数

容器将多个内存块呈现为单个连续的内存块

是否有一些"标准"容器(STL,boost)可以呈现多个内存块作为单个连续的容器?我需要使用以下条件的一些数据:

  • 事先不知道数据的总大小(网络响应)
  • 内存以块的形式分配(有一些外部分配功能,我无法控制)
  • 内存释放不受我控制,因此重新分配相对昂贵

因此,在获取所有数据后,我有一个内存块列表.我需要将一些STL算法(搜索,复制等)作为一个整体应用于数据.有一个解决方案来写容器来保存有关这些块+前进迭代器的信息,它可以从一个块"跳转"到另一个块.

但问题似乎相当普遍,所以我希望有一些我不知道的着名答案.提前致谢.

c++ containers memory-management

6
推荐指数
1
解决办法
261
查看次数

标签 统计

c++ ×2

c# ×1

c++11 ×1

clr ×1

containers ×1

gcc ×1

memory-management ×1