小编CRN*_*CRN的帖子

"char []"是一个合适的类型吗?

昨天,我惊讶地发现了一些似乎char[]被视为类型的代码:

typedef std::unique_ptr<char[]> CharPtr;
Run Code Online (Sandbox Code Playgroud)

以前,我会写一些类似的东西:

typedef std::unique_ptr<char*, CharDeleter> CharPtr;
// Custom definition of CharDeleter omitted
Run Code Online (Sandbox Code Playgroud)

经过一些研究,我发现char[]语法有效,因为std::unique_ptr提供了一个模板专门化来处理数组(例如,它会自动调用delete[]数组而不需要自定义删除器)

但是char[]在C++ 中究竟意味着什么呢?

我见过如下语法:

const char a[] = "Constant string"; // Example 1

char *p = new char[5]; // Example 2

bool foo(char param[10]); // Example 3
Run Code Online (Sandbox Code Playgroud)

这是我解释这些例子的方式:

示例1分配一个静态数组(在堆栈上)并且空索引是有效的,因为字符串的真实大小在编译时是已知的(例如,编译器基本上是在幕后处理我们的长度)

示例2动态分配5个连续字符,第一个字符存储在p中存储的地址中.

示例3定义了一个函数,该函数将大小为10的数组作为参数.(在后台,编译器将数组视为指针) - 例如,有一个错误:

void foo(char test[5]) {}
void foo(char * test) {}
Run Code Online (Sandbox Code Playgroud)

因为函数签名对编译器来说是不明确的.

我觉得我理解阵列/指针的差异和相似之处.我的困惑可能源于我缺乏构建/阅读C++模板的经验.

我知道模板专门化基本上允许根据模板类型参数使用自定义模板(基于特定模板).是char[]一个简单的语法,可用于模板特(调用特定的专门化)?

另外,数组"类型"的正确名称是char[]什么?

c++ arrays templates c++11

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

如果 I/O 完成端口数据包可能以不同的顺序出列,为什么它们按 FIFO 顺序排队?

Microsoft 的I/O 完成端口文档指出:

请注意,虽然 [completion] 数据包按 FIFO 顺序排队,但它们可能会以不同的顺序出队。

我的理解是线程通过调用GetQueuedCompletionStatus从完成端口获取完成数据包。如果系统不能保证按 FIFO 顺序检索数据包,为什么系统会按 FIFO 顺序将数据包排队到完成端口?

iocp

2
推荐指数
1
解决办法
1115
查看次数

标签 统计

arrays ×1

c++ ×1

c++11 ×1

iocp ×1

templates ×1