nodejs和c++之间的类型转换

nodejs和c++之间的类型转换

ID:33521890

大小:268.11 KB

页数:11页

时间:2019-02-26

nodejs和c++之间的类型转换_第1页
nodejs和c++之间的类型转换_第2页
nodejs和c++之间的类型转换_第3页
nodejs和c++之间的类型转换_第4页
nodejs和c++之间的类型转换_第5页
资源描述:

《nodejs和c++之间的类型转换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、NodeJS和C++之间的类型转换虽然在Node.js官方网站有很多的关于怎么使用这些API的文档,但是在JavaScript和C++之间传递数据是一件非常麻烦的事情,C++是强类型语言(”1024”是字符串类型而不是整数类型),而JavaScript却总是默认的帮我们做一些类型转换。作者:慎里来源:慎里

2、2016-12-0711:23 收藏  分享 我非常喜欢使用Node.js,但是当涉及到计算密集型的场景时Node.js就不能够很好地胜任了。而在这样的情况下C++是一个很好的选择,非常幸运Node.js官方提供了C/C++Addons 的

3、机制让我们能够使用V8API把Node.js和C++结合起来。虽然在Node.js官方网站有很多的关于怎么使用这些API的文档,但是在JavaScript和C++之间传递数据是一件非常麻烦的事情,C++是强类型语言(”1024”是字符串类型而不是整数类型),而JavaScript却总是默认的帮我们做一些类型转换。JavaScript的基本类型包括String,Number,Boolean,null,undefined,V8使用类继承的方式来定义这类型,这些类型都继承了 Primitive 类,而 Primitive 继承了 Value,v8也

4、支持整型(包括 Int32 和 Uint32),而所有的类型定义都可以从V8 类型文档中看到,除了基本的类型,还有Object,Array,Map等类型的定义。基本类型的继承关系如下图:在V8中所有JavaScript值都是被放在 Local 对象中,通过这个对象指定了JavaScript运行时的内存单元。下面这段代定义了一个 Number 类型的值,其中Test函数中声明的isolate变量代表着V8虚拟机中的堆内存,当创建新变量的时候就需要用到它,接下来的一行代码就通过isolate声明了一个 Number 类型的变量。1.#includ

5、e  2.#include  3. 4.using namespace v8; 5. 6.void Test(const v8::FunctionCallbackInfo& args) { 7.    Isolate* isolate = args.GetIsolate(); 8.    // 声明变量 9.    Local retval = v8::Number::New(isolate, 1000); 10.} 11. 12.void init(Local 

6、> exports, Local module) { 13.    NODE_SET_METHOD(exports, "getTestValue", Test); 14.} 15. 16.NODE_MODULE(returnValue, init) 看了V8 类型API文档 你会发现对于基本的JavaScript类型,只有变量的声明而没有变量的赋值。最初想可能觉得这个非常的奇怪,可是仔细想一想后发现这个是合理的。主要由以下几点原因:·JavaScript的基本类型是不可变类型,变量都是指向一个不可变的内存单元,vara=10,

7、则a指向的内存单元中包含的值为5,重新赋值a=100,没有改变这个内存单元的值,而是使得a指向了另外一个内存单元,其中的值为100。如果声明两个变量x,y的值都为10,则他们指向的是同一个内存单元。·函数的传参都是传值,而不是传引用,当在JavaScript中调用C++的函数时,如果参数是基本类型则每次都是把这个值拷贝过去,改变参数的值不会影响原来的值。·使用 Local 声明基本类型的变量都是对内存单元的引用,因为第一条原因不可能改变引用的值使其指向另外一个内存单元,因此不存在变量的重新赋值。数据流向C++->JavaScri

8、pt下面demo定义了一些常用的JavaScript类型,包括基本类型的以及Object,Array,Fuction。1.#include  2.#include  3. 4.using namespace v8; 5. 6.void MyFunction(const v8::FunctionCallbackInfo& args) { 7.    Isolate* isolate = args.GetIsolate(); 8.    args.GetReturnValue().Set(String::

9、NewFromUtf8(isolate, "Hello World!")); 9.} 10. 11.void Test(const v8::FunctionCall

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。