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
对象中的普通成员使用 ->或.