• LDxy
    置顶
    2022-03-14
    1,C++在调用C写的函数时感到很困惑,有的人说要在C函数前加上:: 有的人又说不用加可以直接调。2,在C++中包含处理C字符串的头文件,有人说包含string.h就行,有人说要包含cstring。3,智能指针是可以在频繁创建对象且对程序性能有要求的场合用吗?4,源文件的后缀名也很糊涂,命名为*.cpp, *.cc, *.hpp, *.hh, *.h的都有,到底该用哪种?5,std::this_thread::sleep_for(std::chrono::milliseconds(50))和Sleep(50)是等价的吗?

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

    共 2 条评论
    1
  • ahack
    2022-03-15
    这一节课收获很大,印象最深刻的在于c++是c的内容的选择并增添了类的特性,除此之外还针对频繁的内存管理生产出了智能指针,再就是性能这里有封装有优化就会有性能开销,所以在某些极致的场景下没有添加任何额外开销的c性能更优秀,我这才懂了为啥马斯克说我支持rust
    共 1 条评论
    1