簡體   English   中英

對象與 Static 保留變量 function state

[英]Objects vs. Static Variables for retaining function state

我有一個 function 處理作為序列的數據。 因此,我需要知道當前 function 調用期間最后一次 function 調用中某些變量的值。

我目前的做法是使用 static 變量。 我的 function 是這樣的:

bool processData(Object message){
    static int lastVar1 = -1;

    int curVar1 = message.var1;
    if (curVar1 > lastVar1){
        // Do something
    }

    lastVar1 = curVar1;
}

這只是代碼的一小部分; 實際上,我有 10 多個 static 變量跟蹤不同的事物。 我的直覺告訴我使用這么多 static 變量可能不是一個好主意,盡管我沒有什么可以支持這種感覺。

我的問題:有沒有更好的方法來做到這一點?

An alternative I've been looking into is using an object whose fields are lastVar1, lastVar2, etc. However, I'm not sure if keeping an object in memory would be more efficient than using static variables.

您的問題有一種純粹是關於風格和意見的味道,盡管有些方面不是意見問題:多線程和測試。

考慮一下:

bool foo(int x) {
    static last_val = -1;
    bool result = (x == last_val);
    last_val = x;
    return result;
}

您可以從多個線程同時調用此 function 但它不會達到預期的效果。 此外,您只能通過斷言它做正確的事情來測試 function:

   foo(1);
   assert( foo(1) );    // silenty assumes that the last call did the right thing

要為測試(第一行)設置先決條件,您已經必須假設foo(1)做了正確的事情,這在某種程度上違背了在第二行中測試調用的目的。

如果方法需要當前的 object 和以前的 object,只需通過兩者:

bool processData(const Object& message,const Object& previous_message){

    if (message.var1 > previous_message.var1){
        // Do something
        return true;
    }   
    return false;
}

當然,這只是將跟蹤上一條消息的問題轉移給了調用者,盡管那是直截了當的並且不需要搞亂靜態:

 Object message, old_message;
 while ( get_more( message )) {
     processData(message, old_message);
     old_message = message;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM