3-3日

1.c_str

c_str()返回的是一个临时指针,用于string类型转指针类型

string redis_cmd = "GET " + redis_key;
result = _rd_client.exec_command(redis_cmd.c_str());

//exec_command定义
redisReply* redis_client::exec_command(const char *cmd) {
    return exec_command_with_args(cmd);
}

 3.命令注册

 // 将sample_handler注册到命令字"echo"上
 // 错误码基值是87000
 REGISTER_SERVICE_HANDLER_EX("echo", sample_handler, 87000);

 // 一个类可以注册多个不同的命令字
 REGISTER_SERVICE_HANDLER_EX("echo_another", sample_handler, 87000);

 class sample_handler
 {
 public:
     // 必须提供一个构造函数,可以接受thread_data &类型参数
     sample_handler(thread_data &)
     {}

 public:
     // 必须提供一个名为handle的函数,可以接受以下参数形式的调用

     void handle(
        const nshead_t * in_head,
        const mc_pack_reader & in_pack,
         const mc_pack_writer & out_pack)
     {
   //业务实现 
   } };

 4.const和constexpr

constexpr可以用来修饰变量、函数、构造函数。一旦以上任何元素被constexpr修饰,那么等于说是告诉编译器 “请大胆地将我看成编译时就能得出常量值的表达式去优化我”。

const int func() {
    return 10;
}
main(){
  int arr[func()];
}
//error : 函数调用在常量表达式中必须具有常量值

编译期大胆地将func()做了优化,在编译期就确定了func计算出的值10而无需等到运行时再去计算。

类内静态变量赋值,必须用const修饰

class A{
public:
       static int a=1;   //报错           
       static const int b = 1;  //正确
      static const double pi1 = 3.14;//报错
       static constexpr double pi3 = 3.14;//正确
}  

总之总结两句就是:
1、不建议在类内初始化。
2、静态成员只有一个副本,所有的类对象共用。而非静态成员每个对象有一个副本。

 

类内静态成员变量的使用:

A::a

对象中的普通成员使用 ->或.

 

posted @ 2021-03-03 11:55  dsfsadfdgd  阅读(50)  评论(0编辑  收藏  举报