2017-01-22 145 views
0

在Qt 4.8使用memcpy使用Qt 4.8

當我#include <cstring>,我發現我可以直接使用memcpy

爲什麼我不需要使用std::memcpy呢?

編譯器爲什麼不報告錯誤?

回答

1

的標準說(§17.5.1.2/ 4)

除了通過30和附件d如項17所指出的,每一個報頭CNAME的內容是一樣的 使得相應的頭文件name.h按照C標準庫(1.2)的規定。但是,在C++標準 庫中,聲明(C中定義爲宏的名稱除外)位於名稱空間std的名稱空間範圍(3.3.6)內。沒有指定這些名稱(包括在第18章至第30章和附錄D中添加的任何重載 )是否首先在全局命名空間範圍內聲明,然後 通過顯式使用聲明(7.3.3)注入命名空間std。

所以,當你有<cstring>名稱是命名空間std::可用,但它是允許的名字也是在全局命名空間。

同樣,當你包括<string.h>名稱是保證在全局命名空間,但也可能是在命名空間std可見。