據我所知,類的每個實例在內存中都有自己的成員變量,因此它可以爲不同的對象存儲不同的值。但是,成員函數並不相同。成員函數在一個類的對象之間重用,所以它只有一個地址和一個內存塊,以便在所有對象需要時進行引用。內存中靜態方法和非靜態函數之間的區別
靜態函數用於訪問靜態成員。但是,靜態函數在其應用程序的生命週期中也僅存在一個。除了作爲靜態存取器之外,它在低級別上與普通的類函數沒有區別,不是嗎?或者,也許我錯了,每個班級都有自己的功能?
據我所知,類的每個實例在內存中都有自己的成員變量,因此它可以爲不同的對象存儲不同的值。但是,成員函數並不相同。成員函數在一個類的對象之間重用,所以它只有一個地址和一個內存塊,以便在所有對象需要時進行引用。內存中靜態方法和非靜態函數之間的區別
靜態函數用於訪問靜態成員。但是,靜態函數在其應用程序的生命週期中也僅存在一個。除了作爲靜態存取器之外,它在低級別上與普通的類函數沒有區別,不是嗎?或者,也許我錯了,每個班級都有自己的功能?
這不同於語言,但在C或C++ 03功能通常映射在彙編函數;即它們在內存中存在一次(不管是自由函數,類函數還是類靜態函數)並將參數作爲參數使用,其中包括用於隱式成員函數的指針this
。
在C++ 11中,lambda函數引入了一種新穎性:所謂函數的每個實例都會攜帶一些狀態。從實現的角度來看,它意味着需要創建一個「常規」函數,並將其與一個匿名數據捆綁在一起(如果需要的話)。每次創建lambda時,該函數都不需要重複,但數據卻可以。一個有用的數字是記住lambdas(用C++)替換函數對象(或謂詞對象):它們只是語法糖,實現類似。
非靜態函數接受附加參數this
,它是指向具有特定於實例的變量的類實例的指針。
靜態函數沒有這個參數(因此您不能在一個靜態函數中使用this
並且只能訪問靜態數據成員)。
靜態和成員函數的唯一區別是成員函數始終自動傳入this
指針。
簡單地說,如果它被引用,靜態函數爲它自己創建一組單獨的內存,並且用於通常不可更改的靜態數據成員。但是,非靜態函數爲每個實例創建單獨的一組內存,並且適用於非靜態和靜態數據成員。如果你需要穩定的輸出去靜態,如果你需要替代去靜態。