精华内容
下载资源
问答
  • 我在看Android中View的实现代码,发现很多成员方法里面都用一个临时变量来引用成员变量,不知道这样做有什么意义?下面我摘录的一段代码:publicclassView{...privatestaticclass...我在看Android中View的实现...

    我在看Android中View的实现代码,发现很多成员方法里面都用一个临时的变量来引用成员变量,不知道这样做有什么意义?下面是我摘录的一段代码:publicclassView{...privatestaticclass...

    我在看Android中View的实现代码,发现很多成员方法里面都用一个临时的变量来引用成员变量,不知道这样做有什么意义?下面是我摘录的一段代码:

    public class View {

    ...

    private static class ScrollabilityCache implements Runnable {

    /**

    * Scrollbars are not visible

    */

    public static final int OFF = 0;

    /**

    * Scrollbars are visible

    */

    public static final int ON = 1;

    /**

    * Scrollbars are fading away

    */

    public static final int FADING = 2;

    ...

    public final Interpolator scrollBarInterpolator = new Interpolator(1, 2);

    ...

    public void run() {

    ...

    /**********这里用interpolator保存成员变量scrollBarInterpolator!!!!!!!!!!!!!********/

    Interpolator interpolator = scrollBarInterpolator;

    // Start opaque

    interpolator.setKeyFrame(framesCount++, nextFrame, mOpaque);

    // End transparent

    nextFrame += scrollBarFadeDuration;

    interpolator.setKeyFrame(framesCount, nextFrame, mTransparent);

    state = FADING;

    // Kick off the fade animation

    host.invalidate();

    }

    }

    }

    }

    谢谢您的回复,我想应该也是惯例。

    scrollBarInterpolator被定义成public,所以声明成final.

    如果不这样,其它类对象可能直接引用并修改它。这和这个类的run方法在独立的线程执行应该没有关系。另外,在View这个类里,也看到了其它没有被声明成final的成员变量,在成员方法里也用临时变量引用了,就像示例中一样。

    展开

    展开全文
  • 所以我发现自己经常做如下的模式.代替:if (map.containsKey(someKey)) {Value someValue = map.get(someKey);...}为了不遍历地图两次(因为我知道我的地图不...= null) {...}这似乎一个值得的模式,因为地图操作...

    所以我发现自己经常做如下的模式.代替:

    if (map.containsKey(someKey)) {

    Value someValue = map.get(someKey);

    ...

    }

    为了不遍历地图两次(因为我知道我的地图不存储空值),我会做:

    Value someValue = map.get(someKey);

    if (someValue != null) {

    ...

    }

    这似乎是一个值得的模式,因为地图操作执行了相当数量的操作,我认为优化器不够聪明,不能优化它.

    但是,在其他情况下,我发现自己在做类似的模式.例如,我应该将someMethod()结果存储在临时变量中,而不是进行两次调用?显然,如果有副作用,我不能调用someMethod()两次,但从优化的角度来看,只能调用一次是有意义的?

    if (someObject.someMethod() != null) {

    processSomehow(someObject.someMethod());

    }

    我知道这个边界是一个“不具建设性”的问题,所以我正在寻找提供一些事实和参考的答案,而不是猜测.

    >做什么时候有什么意义,什么时候不做?

    >如何评估someMethod()的“成本”,以确定何时应该使用临时变量?

    >对于诸如get方法之类的简单方法,这可能会妨碍热点编译器或优化器的实现,并且实际产生效率较低的代码?

    对于后代,我不是问“如何提高我现有程序的速度”.我试图弄清楚“我写未来代码时应该使用什么模式”.

    感谢任何信息.

    展开全文
  • 什么是Java更快.直接多次访问数组索引,或将数组索引的值保存到新变量并使用它来进行后续计算?访问索引if ((shape.vertices[0].x >= fromX && shape.vertices[0].x <= toX) || // left side of shape ...

    什么是

    Java更快.直接多次访问数组索引,或将数组索引的值保存到新变量并使用它来进行后续计算?

    访问索引

    if ((shape.vertices[0].x >= fromX && shape.vertices[0].x <= toX) || // left side of shape in screen

    (shape.vertices[0].x <= fromX && shape.vertices[0].x + shape.width >= fromX) || // right side of shape in screen

    (shape.vertices[0].x >= fromX && shape.vertices[0].x + shape.width <= toX)) { // shape fully in screen

    // ...

    }

    临时变量

    float x = shape.vertices[0].x;

    float y = shape.vertices[0].y;

    if ((x >= fromX && x <= toX) || // left side of shape in screen

    (x <= fromX && x + shape.width >= fromX) || // right side of shape in screen

    (x >= fromX && x + shape.width <= toX)) { // shape fully in screen

    // ...

    }

    展开全文
  • 那讨厌的临时变量什么时候产生呢? 产生临时变量的三种情况:一:以By Value的方式传值;二:参数为const的类型。三:类型转换 一:以By Value的方式传值。 我们都知道,引用类型和指针类型传递的都...

    作者:陈太汉

     是的。我们讨厌产生临时变量,因为它要占用我们的内存,消耗我们的CPU时间,让我们的程序性能降低。但有时候它是必须的。

     那讨厌的临时变量什么时候产生呢?

    产生临时变量的三种情况:一:以By Value的方式传值;二:参数为const的类型。三:类型转换
    一:以By Value的方式传值。
         我们都知道,引用类型和指针类型传递的都是地址,可以直接对地址中存放的数据进行操作,
         而以传值的方式传递参数,就会在heap中重新分配一个临时区域,
         将实参中的数据拷贝到临时区域中,而你对这分数据进行的任何的操作都不会影响实参的内容,因为实参跟形参只是内容相同,
         分别在两块不同的内存中。而引用和指针操作的是同一块内存,所以形参修改后,实参也修改了。
    二:参数为const的类型。(此观点错误,请看我的这篇文章:Effective C++ 类与函数的设计和申明
         因为常量是不能修改,在只需要实参中的数据,而不需对实参进行修改时,或是禁止对实参进行修改时,把形参定义为const类型,
         系统会产生一个临时变量,就能起到保护数据的作用,如在函数strlen中,修改参数的值行吗?本来只是想得到实参的长度,结果在函数中被修改了,那得到得实参长度还是真实的吗。
         如果你程序中的数据到处都可以被修改,那是多么的可怕(所以我们讨厌全局变量),所以const还是有它存在的价值。
    三:类型转换的时候会产生临时变量。
         真是糟糕啊,在用类型转换带来便利的同时,产生临时变量就是我们承担的损失。
         如将一个short类型转换成int类型,他们占用的内存不一样,如果不产生临时变量,那不就short类型和int类型占用的字节数不就一样了吗,sizeof不就坑爹了吗
     
         C++语言禁止为非常量引用产生临时对象。同时证明引用类型传参不会产生临时变量,如char[]转换成string会报错,他们都是引用类型

         以下是我自己写的基本函数,练手啊,下面这些函数参数前面很多都加了const,那不是到处都在产生临时变量吗?我在想,我就不要const,我就不准对这些参数进行任何修改,行吗?
         谁能给我答案?我只想在不需要产生临时变量的时候不让它产生......跟着标准走吧。 

    复制代码
    //字符串赋值之前先delete左边那个字符串,再分配一块新的内存的内存存放右边的字符串,让左边字符串的指针指向这块新内存
    //如果左右两边的字符串相等,即指向同一块内存,delete左边的字符串相当于delete了这两个字符串。
    char* strcpy(char* str,constchar* source)
    {
    if(str==source) 

    return str;
    }
    if(str==NULL || source==NULL)
    {
    return NULL;
    }
    char* ptStr=str; //为了实现串联操作
    while((*str++=*source++)!=NULL);
    return ptStr;
    }

    //参数为const类型,系统会产生一个临时变量用于存放实参的内容,
    //但如果形参不定义成const类型,如果参数的内容被修改了,那么这个函数可能就不能得到正确的值.
    int strlen(constchar* str) 

    if(NULL==str)return-1;
    int len=-1;
    while(*(str+(++len))!='\0');
    return len;
    }

    //指定字符第一次出现的位置
    constchar* strchr(constchar* str,char c)
    {
    if(NULL==str)
    {
    return NULL;
    }
    while(str &&*str!=c)
    {
    str
    ++;
    }
    if(str=='\0')
    {
    return NULL;
    }
    return str;
    }

    //子字符串第一次出现的位置
    int strstr(constchar* str,constchar* substr)
    {
    if(NULL==str || NULL==substr)
    {
    return-1;
    }
    if(strlen(str)<strlen(substr))
    {
    return-1;
    }

    constchar* tmp;
    int i=0;
    while(*str!='\0')
    {
    tmp
    =substr;
    if(*str==*tmp)
    {
    int j=0;
    while(*str!='\0'&&*tmp!='\0'&&*(str+j++)==*tmp++);

    if(*tmp=='\0')
    {
    return i;
    }
    }
    str
    ++;i++;
    }
    return-1;
    }

    //追加字符串
    char* strcat(char* str,constchar* cat)
    {
    if(NULL==cat || NULL==str)
    {
    return str;
    }

    char* tmp=str;
    while(*str)//将指针移到最后
    {
    str
    ++;
    }

    while((*str++=*cat++)!='\0');//追加字符
    str=tmp;
    return str;
    }

    //比较字符串
    int strcmp(constchar* str1,constchar* str2)
    {
    if(NULL==str1 && NULL==str2)
    {
    return0;
    }
    if(NULL==str1)
    {
    return-1;
    }
    if(NULL==str2)
    {
    return1;
    }
    while(*str1 &&*str2 &&*str1==*str2)
    {
    str1
    ++;
    str2
    ++;
    }
    return*str1-*str2;
    }
    复制代码

    展开全文
  • JDK源码中为什么在方法中创建一个临时变量替代成员变量、类变量 又名 临时变量提高Java代码性能 一个Java类中可以存在多种形式的变量,可以最一般的成员变量;或静态变量;或临时变量。那么这三种变量的存取效率...
  • 临时变量

    2012-02-23 23:25:48
    临时变量的一个用处保存较长的表达式, e.g. search_text = window->grid->searchText->Text 突然想什么临时变量? 用作用域分, 被使用次数分, 还是目的来分(比如保存较长表达式。。递归了)
  • 临时变量是只在调用期间有效,具有常性的一种变量。 一、值传递 在返回值以值传递(传值和传指针)的形式返回时,会生成临时变量。 int sum(int a,int b) { return a + b; } 编译器会将结果a+b的值拷贝给临时...
  • 函数传递参数过程中会有临时变量产生,为什么呢? 当从一个作用域A跳到另一个作用域B时,这里A中的变量就不会在B中发生“生效”。 于是把A的变量“值”交给临时变量,,再由临时变量在B中进行使用。 ...
  • c++临时变量

    2017-05-21 19:42:57
    C++临时变量“有时候,在求表达式的期间,...需要注意的,编译器创建的这个临时变量为常量.” – Thingking in C++什么情况下编译器会创建临时变量看下面代码:class A{ public: print(){ cout<<"hello world"<<en
  • FC一个没有存储空间的逻辑快,FC的临时变量存储在本地数据堆栈中,这些数据在FC执行完毕后将会丢失,要永久保存数据,必须使用共享数据块DB。所以呢,由于FC没有存储空间,必须要给FC的参数指定实...
  • C++中的临时变量

    2012-08-27 15:44:57
    临时变量,说到这个词很多开发的人应该都知道,但是却有很多人并不是真正具体的理解临时变量,很多人提到临时变量想到的都是我们在一个函数中自己... 那什么才是真正的临时变量呢,临时变量是什么时候使用的呢?下面
  • 环境变量是操作系统中具有特定名称的对象,包含一个或多个应用程序使用的信息。二、作用当要求系统运行一个程序而不告诉其程序所在的完整路径时,系统不仅应该在当前目录下找到该程序,还应该在path中找到指定的路径...
  • #include<iostream> #include<set> #include<vector> using namespace std; class VectorSetTest { public: VectorSetTest() { m_set.insert("Set1"); m_set.insert("Set2");...}
  • 临时变量问题

    2010-11-23 14:05:00
    临时变量的问题,哈哈,代码如下#include char* fun() { char* p = "hello"; return p; } char* fun1() { char p[] = "hello"; return p; } int main( ) { printf( fun() ); printf( fun1() ...
  • 今天在一篇博客上面看到如下两段代码,博客的作者给出了一个问题,但是并没有解释为什么不同。自己通过实验给出了解释,但是不知道对不对,仅供参考! 下面个错误的例子: char* get_str(void) { &nbsp; &...
  • 什么是java环境变量环境变量:环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的...
  • 关于临时变量

    2012-08-02 14:52:01
    什么是临时对象?  C++真正的临时对象不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象. 通常出现在以下两种情况: (1)为了使函数调用成功而进行隐式类型转换的时候。  ...
  • 如果实参与引用参数不匹配,C++将生成临时变量。当前,仅当参数为const引用时,C++才允许这么做,但以前不是这样。下面来看看何种情况下,...2、实参的类型不正确,但可以转换为正确的类型左值是什么呢?左值参数是...
  • 其实不一定非要用栈来保存临时变量,只不过如果这个函数调用符合后进先出的特性,基于栈的数据结构的特性,用它是最顺理成章的选择。 Tips: 从调用函数进入被调用函数,对于数据来说,变化的是什么呢? 是作用域。...
  • 在一段代码中 { __int64 data; ... ; fun ( data ); //作为参数传入 函数执行失败 改为 __int64 data; ... ; __int64 t = data; fun ( t ); //执行成功 ...(在pc上成功, 在arm上失败的)
  • java环境变量是什么意思发布时间:2020-04-11 14:56:54来源:亿速云阅读:94作者:小新java环境变量是什么意思?很多人都不太了解,今天小编为了让大家更加了解java环境变量,所以给大家总结了以下内容,一起往下看...
  • 我完全理解,如果您回收占位符变量,则需要一个“临时变量来使getnextdocument()工作,但为什么不只有一个变量并在循环后回收该变量什么不回收“ doc”的成本无法承受,为什么不回收“ Temp”的成本可以接受的...
  • 求助大神,,,当函数返回一个结构时,系统会创建临时变量来存储这个结构,比如 ``` stru1 = func(stru2);//stru1一个结构,func()函数返回一个结构 ``` ...如果换成引用,则系统...请问为什么不会创建临时变量
  • c++中函数的返回值存储在临时变量中的 下面个实验 如图,func2函数建立的引用不是func1形参x的引用,而是临时变量的引用 (这个引用比指针好用,因为你无法取得临时变量的地址,所以无法建立指向临时变量的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,037
精华内容 814
关键字:

临时变量是什么