作者回复: 很棒的问题! 1. 这个问题应该取决于你的代码是怎么写的,通常来说,通过 “#include” 包含进来的 C 头文件应该是在全局作用域的,因此,调用的时候自然也是需要使用全局作用域中的那个,但实际上需不需要 “::” 则取决于你的具体调用地; 2. 这个肯定还是建议包含以 “c” 开头的这些头文件; 3. 实际上是可以使用的,但对于性能这类问题,建议还是以具体的 case 入手再进行分析,看瓶颈在哪里,而不是听到智能指针有一些性能损耗就直接放弃。就比如边界检查实际上也有开销,但大多数情况都不是影响程序性能的那 80% 的重要因素,在流水线化的处理器上根本不成问题; 4. 后缀名实际上对编译来说没有区别,选择配套的来用就行,比如 .cc 与 .hh;.cpp 与 .hpp。但混用关系也不大,可能会影响某些老的调试工具的某些功能。 5. 这两个方法的抽象层次不同,一个是语言标准库中定义的,一个是 POSIX 标准中定义的。两者可能在调用上有一定重合,比如编译器在实现 sleep_for 时可能会在底层直接调用操作系统提供的 sleep 方法。具体依编译器而定。