我正在使用boost 1.49.0,我想知道为什么boost :: shared_ptr在全局命名空间中声明close(),就是这个程序:
#include <boost/shared_ptr.hpp>
int main() {
int h = 3;
close(h);
return 0;
}
编译并运行。我不希望close()成为shared_ptr接口的一部分。对我来说意外的后果是追踪我的程序中的一个错误,该错误使用带有句柄界面的C库。而不是调用libary的句柄close函数,它具有像H5Dclose这样的独特名称(我正在使用hdf5库,C接口,而不是C ++接口,事后我不必担心这种问题C ++接口),我错误地调用了close而不是H5Dclose,这最终编译(并调用unix,文件句柄关闭函数)。得到编译器错误会很好。
答案 0 :(得分:2)
It doesn't。该标题中没有符号close
。
我猜Boost使用的一些标准头文件正在利用标准的宽容来使C库函数在全局命名空间中可用。
得到编译器错误会很好。
close
对于H5Dclose
的错字{{1}}对我来说是超出预期编译器错误的方式。你的单元测试无论如何都会抓住它,对吗?