You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C++数组去重代码的两处技术细节疑问

关于C++数组去重代码的两个疑问解答

疑问1:为何函数参数无需传入数组容量?是否因数组元素已确定,长度可被自动识别?

普通C风格数组作为函数参数时,会退化为指针——比如你写void deduplicate(int numbers[]),编译器实际会把它当成void deduplicate(int* numbers)处理,这时候编译器根本不知道原数组的长度,不可能自动识别。

讲师的代码大概率用了模板函数结合数组引用的写法,比如:

template <size_t N>
void deduplicate(int (&numbers)[N]) {
    // 这里N就是数组的容量,编译器会自动推导
}

这种写法里,数组是以引用的形式传递的,编译器能通过模板参数推导拿到数组的实际大小N,所以不需要手动传入容量。如果不是这种写法,那要么是代码里用了其他标记(比如数组末尾有特殊值),要么就是暗藏bug——毕竟光靠指针根本没法确定数组长度。

疑问2:当unique_counter初始化为0时,首次执行unique_data[unique_counter++] = numbers[0]时,是否先以0为下标赋值再进行自增操作?

对,完全是你想的这样。C里的**后置自增运算符()**规则是:先返回变量的当前值,再对变量进行自增操作。

举个最简单的例子验证:

int x = 0;
int y = x++;
// 此时y的值是0,x的值是1

放到你的代码里就是:先用unique_counter的当前值0作为下标给unique_data赋值,赋值完成后,unique_counter才会自增为1。


内容的提问来源于stack exchange,提问作者Petr Máša

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 11:06:48