C/C++教程

读nodej源码,补c++知识

本文主要是介绍读nodej源码,补c++知识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

知识点1

explicit V8_INLINE Local(T* that) : val_(that) {} 
  • explicit
    首先是explicit关键字,是用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
    什么是隐式转换?
class Number {
public:
	int value;
	Number(int num) {
		value = num;
	}
}
//隐式转换
Number num=1;
//相当于如下↓
Number num(1);
  • V8_INLINE(强制内联)
## define V8_INLINE inline __attribute__((always_inline))

编译相关,不影响代码逻辑,将函数强制内联

  • Local(T* that):val_(that){}
    相当于用that初始化数据val_
    其中Local是构造函数,函数内不做任何事。

知识点2

reinterpret_cast
  • reinterpret_cast
    reinterpret_cast 用于进行各种不同类型的指针之间、不同类型的引用之间以及指针和能容纳指针的整数类型之间的转换。转换时,执行的是逐个比特复制的操作。

知识点3

#define NODE_MODULE_CONTEXT_AWARE_X(modname, regfunc, priv, flags)    \
  extern "C" {                                                        \
    static node::node_module _module =                                \
    {                                                                 \
      NODE_MODULE_VERSION,                                            \
      flags,                                                          \
      NULL,                                                           \
      __FILE__,                                                       \
      NULL,                                                           \
      (node::addon_context_register_func) (regfunc),                  \
      NODE_STRINGIFY(modname),                                        \
      priv,                                                           \
      NULL                                                            \
    };                                                                \
    NODE_C_CTOR(_register_ ## modname) {                              \
      node_module_register(&_module);                                 \
    }                                                                 \
  }
  • \
    用于定义多行宏定义
  • 带参数的宏定义NODE_MODULE_CONTEXT_AWARE_X(modname, regfunc, priv, flags)
    在源码中调用NODE_MODULE_CONTEXT_AWARE_X(...)相当于直接调用下面的extern "C"{}
    宏定义其实就是一段复制黏贴。
  • extern
    即只声明不定义
  //headr.h
  extern int x;

如果没有extern,header.h又被多处引用,那么就会产生重复定义错误。
声明可以多次,定义只能一次

  • extern "C"
    C表示的一种编译和连接规约,而非一种语言
这篇关于读nodej源码,补c++知识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!