• yadandan
    2020-06-26
    老师您好,“这样就绕过了 C++ 的语言限制,不必在实现文件“*.cpp”里再写一遍变量定义,全部的代码都可以集中在 hpp 头文件里”,这句话怎么理解,能举个例子吗?

    作者回复: C++要求静态成员变量必须在cpp文件里定义实现,头文件里只是声明。 而在静态成员函数里声明静态变量,再以函数返回值的形式来使用,就不需要在cpp里重复写一遍,只要在头文件里写就行了。 课程的示例代码就是这样的,你也可以自己模仿着试一下,用静态成员函数代替静态成员变量。

    共 3 条评论
    14
  • reverse
    2020-06-23
    关于UML图 想学的同学可以看一下《UML大象》

    作者回复: uml其实并不难,也没有必要完全学通学精,本质上就是个画图。 先学会最基本的类图、时序图,其他的可以在实践中慢慢学。

    共 2 条评论
    10
  • K. D.
    2020-06-24
    老师你好,我上网查了一下spin lock(自旋锁)和mutex(互斥锁)的区别,自旋锁是会让线程busy waiting,而互斥锁则是让线程sleep,从cpu的占用角度,是否sleep是更好的?busy waiting感觉更加cpu intensive。

    作者回复: 你理解的很对,两者的区别就在这里,自旋锁的好处是不会让出cpu,busy waiting,这在小等待时的代价就比较低,可以充分利用cpu。而mutex会让线程sleep,暂时让出cpu给其他线程,这就有点浪费。 具体该用哪个还是要看应用场景,在这里我用自旋锁只是为了演示atomic的用法。

    共 3 条评论
    7
  • henry
    2020-07-17
    老师您好!ZmqContext 类中的两个工厂方法 recv_sock,send_sock, 返回值是zmq::socket_t的对象,里面的临时对象sock析构时不用担心zmq_close 关闭了_handle,是因为zmq::socket_t实现了移动构造函数,临时对象sock的_handle别转移了,自己的_handle已经是null_ptr了对吧。 要是我自己实现这个代码的话,估计还是会用智能指针的方式。时刻注意构造和析构细节感觉挺麻烦的。

    作者回复: 是的,都看zmq.hpp的源码了,很认真啊。 有了右值和转移构造,在C++里返回对象确实省了很多力气。

    共 2 条评论
    1
  • 泡泡龙
    2020-06-23
    老师能否说说需求到UML图的过程,是怎么把需求提到UML的。还有就是给一张UML图,应该怎么看?

    作者回复: 1.这个就是基本的需求分析了,简单来说,就是提取出需求里的名词和动词,转化成相应的类,比如销售记录、配置文件、锁、XX主循环。 2.UML图有很多种,这里用到的是类图,表示的是类之间的关系,需要理解UML的基本语言要素,比如聚合、联系等,然后可以随便选一个类作为起点,像爬虫一样,沿着关系链接去看它相关的类,逐步去理解这些类是如何配合工作的。

    
    1
  • Geek_1cd0c8
    2023-01-29 来自天津
    老师请问下 ,1.书店程序文章内说是从不同地方收集数据汇到后端服务,当我运行客户端程序c.out,的时候没见到有数据收集的入口呀,2.开着openresty。服务端程序a.cout,第二次运行客户端程序c.out,服务器程序a.out直接崩了,hello cpp_study server 1 2 3 4 terminate called after throwing an instance of 'msgpack::v1::type_error' what(): std::bad_cast 已放弃 (核心已转储),有遇到这个问题吗

    作者回复: 1. 客户端程序只是示意,直接在代码里写死了两条记录。 2.可以用gdb debug看看出错在哪里。

    
    
  • Geek_1cd0c8
    2023-01-20 来自天津
    大哥们编译问题都能解决?编译时 crytypes.h文件 line:24 "std" has no member "string_view" 这需要c++17编译咋没人提 ,你们都用的c++14编译过的吗

    作者回复: 是哪个库引用的string_view?是不是新版本库引用了C++17的这个组件,如果是GitHub项目里的应该用C++14肯定能过的。

    
    
  • 我是一只小小鸟
    2022-09-05 来自北京
    老师,您好,有个问题请教下,只使用.hpp,如果函数接口比较多,易读性怎么保证。到时候一个hpp文件,会不会出现1000+

    作者回复: 其实这个和hpp没有必然关系,用.h + .cpp也会有同样的问题,只要类设计合理,用好设计模式,不要出现面条类,一两千行的源文件也是可以接受的,如果再大就要考虑重构了。

    
    
  • Geek_6427cc
    2021-08-16
    老师您好,get模板函数的返回值不是很懂,不明白LuaRef_cast是什么,类型转换不是只有那四个方法吗

    作者回复: LuaRef_cast是lua bridge自己的类型转换函数,把lua数据转换C++数据。

    共 2 条评论
    
  • Geek_8866d4
    2021-05-07
    /home/wuchaochao/c++/cpp_study/section5/client.cpp:36:20: error: non-local lambda expression cannot have a capture-default 36 | auto make_sales = [=](const auto& id, auto s, auto r) 老师 ,我在编译您的源码的时候报错

    作者回复: 我测试了一下,没有重现你说的这个问题,是不是使用的标准不对,编译时加上-std=c++14再试试。

    共 3 条评论
    