小编sil*_*orb的帖子

在TypeScript中创建强类型数组数组

在像C#这样的语言中,我可以声明一个列表列表,如:

List<List<int>> list_of_lists;
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法在TypeScript中声明一个强类型的数组数组?我尝试了以下方法,但都没有编译.

var list_of_lists:int[][];
var list_of_lists:Array<int[]>;
Run Code Online (Sandbox Code Playgroud)

typescript

58
推荐指数
5
解决办法
5万
查看次数

未使用的STL容器是否分配内存?

鉴于代码:

class Foo {
  std::vector<int> items;
  std::map<int, int> dictionary;
};
Run Code Online (Sandbox Code Playgroud)
  1. 如果没有任何东西被添加到上面的矢量或地图中,还是会分配一块缓冲存储器吗?(换句话说,缓冲区分配总是在容器创建期间发生,还是可以在调用push_back之类的函数之前推迟?)

  2. 是否存在处理初始STL容器缓冲区分配时间的标准,或者是否允许STL容器和编译器之间的行为不同?

注意:这个问题不是关于这样的容器会增加类Foo大小的额外字节.

(这个问题的一个相关子集强调分配大小是C++中向量的初始容量.)

c++ stl allocation stdmap stdvector

13
推荐指数
2
解决办法
1551
查看次数

为什么Promise库使用事件循环?

考虑以下JavaScript代码:

var promise = new Promise();
setTimeout(function() {
    promise.resolve();
}, 10);

function foo() { }
promise.then(foo);
Run Code Online (Sandbox Code Playgroud)

在我看过的promise实现中,promise.resolve()只是设置了一些属性来表明promise被解析了,foo()稍后会在事件循环中被调用,但似乎promise.resolve()会有足够的信息可以立即调用任何延迟函数,如foo().

事件循环方法似乎会增加复杂性并降低性能,为什么要使用它?

虽然我对promise的大多数使用都是使用JavaScript,但我的问题的一部分原因是在C++游戏等性能密集的情况下实现承诺,在这种情况下,我想知道是否可以利用promises的一些好处而不使用事件循环的开销.

javascript c++ performance promise

8
推荐指数
2
解决办法
2294
查看次数

不同的C++类声明

我正在尝试使用不使用命名空间的第三方C++库,并导致符号冲突.冲突的符号用于我的代码没有使用的类,所以我考虑为第三方库创建自定义头文件,其中类声明仅包括我的代码使用的公共成员,而忽略使用冲突类的任何成员.基本上创建一个界面.

我有三个问题:

  1. 如果.obj文件的编译工作,当我进行链接时,这种技术是否会导致符号冲突?

  2. 如果这不是问题,那么变化的类声明会在链接时引起问题吗?例如,链接器是否验证每个.obj文件使用的类的声明是否具有相同数量的成员?

  3. 如果这些都不是问题而且我能够链接.obj文件,它会在调用方法时引起问题吗?我不确切知道C++是如何工作的,但如果它使用索引指向类方法,并且那些索引从一个.obj文件到另一个不同,我猜这种方法会在运行时爆炸.

c++ compilation class declaration static-linking

5
推荐指数
1
解决办法
246
查看次数

当C++不是时,将其视为const

我正在尝试使用Visual Studio 2010编译一些C++代码,但是收到以下错误:

错误C2664:'molder :: Mold :: set_piece_maker':无法将参数1从'piece_maker :: Piece_Maker*const'转换为'piecemaker :: Piece_Maker*'

该错误指的是两个镜像函数,它们管理两个类之间的相互引用:

void Piece_Maker::set_mold(molder::Mold* value, void* origin) {
    if (this->mold == value)
        return;

    this->mold = value;
    this->mold->set_piece_maker(this, this); // This is the line with the error
}
Run Code Online (Sandbox Code Playgroud)

和:

void Mold::set_piece_maker(piecemaker::Piece_Maker* value, void* origin) {
    if (this->piece_maker == value)
        return;

    this->piece_maker = value;
    this->piece_maker->set_mold(this, this);
}
Run Code Online (Sandbox Code Playgroud)
  • 我没有在任何地方使用const这两个类.
  • 只有mold-> set_piece_maker()行才会出现错误,而镜像的piece_maker-> set_mold()行编译得很好.
  • 编译器声称"this"是const但是没有标记我对其模具属性的修改,并且没有标记我传递"this"作为origin参数.
  • 当我实际生成set_mold()const时,编译器会引发错误,试图修改该函数中的模具并尝试将"this"作为原点传递.

编译器可能会发生什么情况来引发该错误?

c++ const this visual-c++

0
推荐指数
1
解决办法
91
查看次数