小编Moj*_*o28的帖子

C++ - 重载[]运算符

我有一个模板类Array:

template <class T=int, int SIZE=10>
class Array {
    T TheArray[SIZE];
public:
    void Initialize() {
        for (int idx=0; idx < SIZE; idx++) {
            TheArray[idx] = T();
        }
    }

    T& operator [](int idx) {
        return TheArray[idx];
    }

    T operator [](int idx) const {
        return TheArray[idx];
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一些关于运算符[]重载的问题(我在网上找到了这个例子).

我理解T& operator [](int idx)返回引用带索引的数组值idxT operator [](int idx) const返回其值.但是,我不确定在哪种情况下使用[]运算符将返回引用或值.

另外,如果我改变T operator [](int idx) const- > T operator [](int idx),编译器会抱怨.这是为什么?我可以理解编译器抱怨因为只有返回类型不同,但是为什么它在const添加时不会抱怨?这只意味着修改了类的内部,对吧? …

c++ overloading operator-overloading operator-keyword

14
推荐指数
2
解决办法
4万
查看次数

C Windows API - 在UnmapViewOfFile之前关闭文件句柄

我想知道是否这个代码片段:

HANDLE fhandle = CreateFile("something.c", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
HANDLE mapping = CreateFileMapping(fhandle, NULL, PAGE_READONLY, 0, 0, NULL);
LPVOID map_view = MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

以下释放对象的顺序有效:

CloseHandle(mapping);
CloseHandle(fhandle);
UnmapViewOfFile(contents);
Run Code Online (Sandbox Code Playgroud)

即我可以先关闭文件句柄然后再打电话UnmapViewOfFile吗?

我知道执行顺序CloseHandle(mapping)UnmapViewOfFile(contents)无关紧要,但是关闭文件句柄呢?

我问,因为我只想使用map_view析构函数的指针.在我看来,这是有效的,文件一直保持到UnmapViewOfFile调用,但也许这可能会导致一些奇怪的行为?

c winapi createfile file-mapping

3
推荐指数
1
解决办法
1332
查看次数