亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3765 | 回復: 9
打印 上一主題 下一主題

[C] 靜態(tài)(static)變量與閉包 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-04-24 08:49 |只看該作者 |倒序瀏覽
本帖最后由 blue_guy 于 2014-04-24 08:53 編輯

在第四次學習lisp(據(jù)說每個程序員都會發(fā)誓,再去碰lisp就剁手)時,突然懂了高大上的閉包。
最近突然有個想法,覺得C中static就是為了完成閉包的。
因為static和閉包都是為了解決變量的生命周期大于作用域的問題,只不過一個是用語法特性優(yōu)雅的解決的,一個是用編譯器生硬的解決的。

就像高大上的委托和反射,說白了就是回調(diào)。

不知道想法是否正確,歡迎指正。

論壇徽章:
26
2015亞冠之胡齊斯坦鋼鐵
日期:2015-06-25 21:40:202015亞冠之柏斯波利斯
日期:2015-08-31 17:03:192015亞冠之柏斯波利斯
日期:2015-11-07 13:10:00程序設計版塊每日發(fā)帖之星
日期:2015-11-10 06:20:00每日論壇發(fā)貼之星
日期:2015-11-10 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-11-26 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-12-02 06:20:00黃金圣斗士
日期:2015-12-07 17:57:4615-16賽季CBA聯(lián)賽之天津
日期:2015-12-23 18:34:14程序設計版塊每日發(fā)帖之星
日期:2016-01-02 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-01-06 06:20:00每日論壇發(fā)貼之星
日期:2016-01-06 06:20:00
2 [報告]
發(fā)表于 2014-04-24 09:32 |只看該作者
想法是正確的, 高大上的想法

論壇徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亞冠之阿爾薩德
日期:2015-06-12 22:53:29午馬
日期:2014-04-15 11:08:53亥豬
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥豬
日期:2013-11-28 12:03:13雙魚座
日期:2013-11-21 14:43:56亥豬
日期:2013-10-23 10:55:49處女座
日期:2013-10-17 18:15:43午馬
日期:2013-09-27 17:40:4215-16賽季CBA聯(lián)賽之青島
日期:2016-06-22 00:45:55
3 [報告]
發(fā)表于 2014-04-24 10:06 |只看該作者
blue_guy 發(fā)表于 2014-04-24 08:49
因為static和閉包都是為了解決變量的生命周期大于作用域的問題


拿“生命周期”與“作用域”兩者來作比較,有掉進陷阱的風險。。。

僅供參考:)



論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設計版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀念徽章
日期:2015-12-22 16:50:40IT運維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術圖書徽章
日期:2016-07-19 13:54:03程序設計版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
4 [報告]
發(fā)表于 2014-04-24 10:48 |只看該作者
類似工廠方法產(chǎn)生的閉包是動態(tài)的,無法用static,還是堆搞比較靠譜吧

論壇徽章:
0
5 [報告]
發(fā)表于 2014-04-24 11:30 |只看該作者
回復 3# Ager
可能我沒表達清楚。。。

我的意思就是
f() {
static int var = 0;
var++;
}

f() {
int var = 0;
ff() {
   var++;
}
return ff;
}
  
都只能在f()可見,但是在f()外部var的值還一直被保持著。

論壇徽章:
0
6 [報告]
發(fā)表于 2014-04-24 11:31 |只看該作者
回復 4# cokeboL
我也想過,但是覺得閉包返回不同函數(shù)應該是if else的事兒。。。
或者我理解錯了,能舉個例子說明下么。

   

論壇徽章:
5
獅子座
日期:2013-08-20 10:12:24午馬
日期:2013-11-23 18:04:102015年辭舊歲徽章
日期:2015-03-03 16:54:152015亞冠之德黑蘭石油
日期:2015-06-29 18:11:1115-16賽季CBA聯(lián)賽之新疆
日期:2024-02-21 10:00:53
7 [報告]
發(fā)表于 2014-04-24 11:42 |只看該作者
static和閉包的區(qū)別,用下面的函數(shù)就能看清楚了(用C++11編譯):
  1. #include <stdio.h>
  2. #include <functional>

  3. int static_f() {
  4.     static int var = 0;
  5.     return ++var;
  6. }

  7. std::function<int()> closure_f_gen() {
  8.     int var = 0;
  9.     return [=]() mutable { return ++var; };
  10. }

  11. std::function<int()> static_f_gen() {
  12.     return static_f;
  13. }

  14. int main(void) {
  15.     auto static_f1 = static_f_gen();
  16.     auto static_f2 = static_f_gen();
  17.     auto closure_f1 = closure_f_gen();
  18.     auto closure_f2 = closure_f_gen();

  19.     printf("static_f: ");
  20.     printf("%d ", static_f1());
  21.     printf("%d ", static_f1());
  22.     printf("%d ", static_f2());
  23.     printf("%d\n", static_f2());
  24.    
  25.     printf("closure_f: ");
  26.     printf("%d ", closure_f1());
  27.     printf("%d ", closure_f1());
  28.     printf("%d ", closure_f2());
  29.     printf("%d\n", closure_f2());
  30.    
  31.     return 0;
  32. }
復制代碼

論壇徽章:
0
8 [報告]
發(fā)表于 2014-04-24 13:59 |只看該作者
回復 7# starwing83

明白了,單從作用域講兩個也是不一樣的,我的理解是錯的。

謝謝。

   

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設計版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀念徽章
日期:2015-12-22 16:50:40IT運維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術圖書徽章
日期:2016-07-19 13:54:03程序設計版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
9 [報告]
發(fā)表于 2014-04-24 17:28 |只看該作者
回復 8# blue_guy


    yes, that's it.

    閉包返回的是不同的實例

論壇徽章:
0
10 [報告]
發(fā)表于 2014-04-25 09:16 |只看該作者
回復 9# cokeboL

明白了,謝謝!

   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP