【发布时间】:2020-03-10 00:06:46
【问题描述】:
This question 和 many more 是该站点上众多问题之一,这些问题询问对 memcpy() 的调用是否有效,长度\大小指定为零。
回答时,大家都引用了当前的C标准(本例为C17 ISO/IEC9899:2017 page 283),
声明为
size_tn的参数指定函数数组的长度,n可以有 调用该函数时的值为零。除非在描述中另有明确说明 在本子条款中的特定函数中,此类调用上的指针参数仍应具有有效值,如 在 7.1.4 中描述。在这样的调用中,一个定位字符的函数找不到任何出现,一个函数 比较两个字符序列返回零,一个复制字符的函数 零个字符。
但是,这是来自 C 标准,不是引用自 C++ 标准。
当前 C++ 标准(即 C++17 ISO/IEC 14882)中的哪些位置列出了相同的定义? C 和 C++ 有两种不同的标准(和语言),据我了解,您不能引用一个标准并期望相同的规则/行为出现在另一个标准中。
如果 C 标准中的此引用在 C++ 中有效,但没有在标准中明确说明,那么有人可以提供支持 之间的这种联系的来源>C 和 C++?
【问题讨论】:
-
memcpy 的手册页说函数“从源指向的位置复制
num字节的值”......并且 0 是num的完全有效值。这足够了吗? cplusplus.com/reference/cstring/memcpy -
@JeremyFriesner 根据International Organization for Standardization's (ISO) website on C++,“像 cppreference.com 和 cplusplus.com 这样的网站 [不具有权威性,用于非官方参考]。”