c++和js中参数入栈顺序区别
来源:互联网 发布:linux 目录占用空间 编辑:程序博客网 时间:2024/06/15 03:31
一.原来一直c++开发,偶尔会遇到参数入栈顺序的问题,而c++是右侧函数先入栈.例子如下:#include <iostream>using namespace std;int left(int& a){ a *= 2; cout << "left " << a << endl; return a; //10}int right( int& a){ a += 2; cout << "right " << a << endl; return a; //5}int _plus( int a = 0, int b = 0 ){ cout << "_plus " << a << " " << b << endl; return a + b; //15}int main(){ int a = 3; cout << _plus( left(a), right(a) ) << endl; //15 int b; cin >> b;}输出结果:
right 5
left 10
15c++的入栈顺序先right后left,所以先加后乘,结果为15.
二.由于先入为主,在后来学习js的时候,也遇到同样的问题结果入栈书序顺序为先成左后右而且全程是引用
function test7(){function left(a){a *= 2;console.log( "left()", a);return a;}function right(a) {a += 2;console.log( "right()", a);return a;}function _plus( a = 0, b = 0 ){console.log( "_plus a:" + a + " b:" + b );return a + b;}var a = 3;console.log( _plus( left(a), right(a) ) );}test7();输出结果:
left() 6
right() 5
_plus a:6 b:5
11js中参数先左后右,结果与c++不同.而且默认是引用传值,所以更应该小心.
阅读全文