註冊 登入



打印

[程式編寫] C++ static array

C++ static array E-mail 此主題給朋友

[隱藏]
印象中以前係只可以用compile time constant去指定static array的長度
原來而家可以咁做..?

https://ideone.com/yCx9aU
複製內容到剪貼板
代碼:
#include <iostream>
using namespace std;

int main() {

    int a = 5;

    char array[a];

    cout << sizeof(array) << endl;

    return 0;
}



回覆 引用 TOP

https://ideone.com/DiYRmX
複製內容到剪貼板
代碼:
void withStackMemory(size_t size, function<void(void*)> body) {
    char buffer[size];
    body(buffer);
}



回覆 引用 TOP

唔係好記得 因為好耐冇寫 c++ ,乜唔係 不撓 都得㗎咩


複製內容到剪貼板
代碼:
char buffer[n];
因為如果而家可以runtime才決定個n
咁樣的話基本上是已經做到alloca一樣的功能

汪汪就係記得以前唔能夠咁樣寫
所以才會出現alloca



回覆 引用 TOP

[隱藏]

回覆 引用 TOP

https://stackoverflow.com/questions/1887097/why-arent-variable-length-arrays-part-of-the-c-standard
https://www.geeksforgeeks.org/variable-length-arrays-in-c-and-c/

再睇多幾個網就越來越唔明了
即係話pure C++是不支援的、C++ standard一直都是拒絕加呢個功能
只有C99是支援呢個功能

但而家的compile都是同時支援C和C++
咁樣搞分裂有咩意義?

==========================

http://www.cnblogs.com/qingergege/p/7520565.html

呢個有趣
GCC和G++的const係不同

[ 本帖最後由 Susan﹏汪汪 於 2018-6-12 10:58 PM 編輯 ]



回覆 引用 TOP

引用:
原帖由 有諗辦法 於 2018-6-12 10:04 PM 發表

唔係好記得 因為好耐冇寫 c++ ,乜唔係 不撓 都得㗎咩
其實汪汪未學Swift果時一直係寫VC++
VC++從來都唔支援VLA
所以汪汪從來的認知就是「不可以咁寫」

之後汪汪轉左用mac同埋學swift就再冇點留意過C/C++
不過而家睇網上講好似話VC++都仲係唔支援呢個功能



引用:
原帖由 Susan﹏汪汪 於 2018-6-12 11:16 PM 發表


其實汪汪未學Swift果時一直係寫VC++
VC++從來都唔支援VLA
所以汪汪從來的認知就是「不可以咁寫」

之後汪汪轉左用mac同埋學swift就再冇點留意過C/C++
不過而家睇網上講好似話VC++都仲係唔支援呢個功能 ...
有乜問題?試玩一定係咁玩





引用:
原帖由 煙民母親生賤種 於 2018-6-13 01:52 PM 發表

有乜問題?試玩一定係咁玩


GCC同clang都係可以咁寫
但如果放去Windows 用visual studio就compile唔到



[隱藏]
引用:
原帖由 Susan﹏汪汪 於 2018-6-13 02:09 PM 發表


GCC同clang都係可以咁寫
但如果放去Windows 用visual studio就compile唔到
微軟野真係廢! 本來想開ⅤSC十十試,點知開個快老都撈幾分鐘。
MS 其實執能左佢對全世界都有益!




回覆 引用 TOP

雖然唔可以咁寫,但係咪應該用 pointer 去做會好啲呢?


引用:
原帖由 有諗辦法 於 2018-6-14 06:44 AM 發表

雖然唔可以咁寫,但係咪應該用 pointer 去做會好啲呢?
正常都會叫你用new 去alloc memory
如果數量多的話、VLA會爆stack

但如果能夠保證到數量有限
VLA係好方便的temp buffer



引用:
原帖由 Susan﹏汪汪 於 2018-6-14 08:44 AM 發表


正常都會叫你用new 去alloc memory
如果數量多的話、VLA會爆stack

但如果能夠保證到數量有限
VLA係好方便的temp buffer
哦~ 原來意思係想要用 stack … 明白



回覆 引用 TOP

[按此隱藏 Google 建議的相符內容]





重要聲明:本討論區是以即時上載留言的方式運作,香港討論區對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意 見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們。香港討論區有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ), 同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權 。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。


Copyright©2003- Discuss.com.hk Limited. All Right Reserved.
版權所有,不得轉載。