现在的位置: 首页 > web前端 > 正文

c 中this i 的用法

2020年07月17日 web前端 ⁄ 共 793字 ⁄ 字号 评论关闭

  在webkit中看到一段代码:classExecState:publicRegister{JSValuecalleeAsValue()const{returnthis[JSStack::Callee].jsValue();}...}其中JSStack::Callee是常量,不管是ExecState还是Register都没有对operator[]进行重载,所以想不明白this[JSStack::Callee]这样的用法是什么意思?


  c++中this[i]的用法是什么语法?


  主要差异在于返回值,相同点在于对i进行自加:


  ++i返回的是i自加后的内容,i++返回的是i未自加的内容。


  举个例子:


  inti=10;


  a=i++;


  vs


  inti=10;


  b=++i;


  结果分别是i=11,a=10和i=11,b=11。


  将i++和++i汇编结果,若没有使用其返回值赋值特性,结果是一样的,有返回值差异在于汇编代码执行先后(先自加还是先赋值)区别。


  另外,关于for(i=0;i<n;i++)与for(i=0;i<n;++i)有差异的说法是扯淡的。现在看到的编译器,基本都会汇编成相同的代码(好像有基本经典教程说有差异,那只是针对古老的编译器)。


  this[i]实例


  这里跟operator[]的重载是没有关系的,因为this是指向自己的指针,而*this才是一个ExecState实例。


  那么问题就是如何从C语言的层面进行理解。this[JSStack::Callee]其实是*(this+JSStack::Callee)。如果没有了解过webkit的代码,但也能猜测calleeAsValue()的调用条件是这个实例在一个数组中(或许是一个用数组实现的栈?),这样那句代码才有意义。


  总之,c中thisi的用法给大家简单的介绍了一些,希望大家多看看。

抱歉!评论已关闭.