我有一个模板类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)返回引用带索引的数组值idx并T operator [](int idx) const返回其值.但是,我不确定在哪种情况下使用[]运算符将返回引用或值.
另外,如果我改变T operator [](int idx) const- > T operator [](int idx),编译器会抱怨.这是为什么?我可以理解编译器抱怨因为只有返回类型不同,但是为什么它在const添加时不会抱怨?这只意味着修改了类的内部,对吧? …
我想知道是否这个代码片段:
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调用,但也许这可能会导致一些奇怪的行为?