名 稱
標 題
內 文
附加圖檔[] []
  • 可附加圖檔類型:GIF, JPG, JPEG, PNG, WEBM,瀏覽器才能正常附加圖檔
  • 附加圖檔最大上傳資料量為 3072 KB。
  • 當檔案超過寬 250 像素、高 250 像素時會自動縮小尺寸顯示
  • 目前附加圖檔使用量大小: 243536 KB / 500000 KB
  • 回覆時程式碼縮排會被trim消掉,請善用[code][/code]標色或貼到ideone等網站
  • LaTeX記法可以用「$$」或「\( \)」包起來,例如「$\sum_{k=1}^{k=n} k^2 = \frac{n(n+1)(n+2)}{6}$」
  • 投稿時請點擊畫像認證後,再按下 [送出] 按鈕提交。
  • 鬧板、攻擊性發言、煽動性發言請無視(回應者也無視),並使用del或在貓管理部向管理員回報。
  • 新介面尚處於測試階段,如果有任何問題可以向管理員或於程設交流版反映。

題名一覽
14063: 無題 (0)13976: 無題 (16)
14059: FxCop (1)13975: springboot問題 (1)
14051: 無題 (0)13974: 資料庫的問題 (1)
14045: 新手問題 C# 剛剛課本看到的語法 (12)13973: 無題 (0)
14039: 請教一下VC++的移動檔案的問題 (3)13970: 無題 (2)
14030: Unity C#新手問題 (10)13965: 無題 (3)
14020: 無題 (8)13955: js-xlsx (8)
14010: 無題 (1)13944: 無題 (3)
14007: tomee安裝新webapp顯示404 (1)13937: 無題 (5)
13988: 無題 (1)13921: 無題 (6)
檔名:1554787312619.jpg-(11 KB, 368x64)
11 KB
C# Crystal Reports無名19/04/09(二)13:21:52 ID:cvTo0iYoNo.13229del[回應]
島民救我
我在C#的Crystal Reports裡面要塞一個文字欄位跟一個圖片的QRCODE
我把這兩個塞進dataset裡面可是只有文字欄位有正常出來
QR扣的圖片卻是如圖這樣
請問我還少了什麼動作
無名19/04/09(二)16:48:17 ID:oLcMGUe6No.13230del
你連程式都不附誰知道你是什麼問題
無名19/04/09(二)21:12:44 ID:Vyosf6pANo.13231del
檔名:1554815564006.png-(95 KB, 400x295)
95 KB
珍惜生命,遠離Crystal Reports

試試看RDLC如何?
無名19/04/11(四)00:11:53 ID:7SPN8Q82No.13239del
圖片要用二進位丟進去吧
無名19/04/11(四)09:51:34 ID:WAtjHSZUNo.13240del
>>13231
不能同意更多

檔名:1554877371698.png-(8 KB, 801x284)
8 KB
APPLE開發者帳號的稅務設定無名19/04/10(三)14:22:51 ID:WsTDp1HwNo.13232del[回應]
被老闆要求處理蘋果APP要上內購的東西,要弄稅務設定
然後按下填寫台灣稅務表格的時候跳出左邊這個東西


想問台灣稅務ID是什麼? 公司的統一編號嗎? 還是稅籍編號?

直接去APPLE支援問他們只會跳針循環...
有回應 1 篇被省略。要閱讀所有回應請按下回應連結。
無名19/04/10(三)14:50:39 ID:WsTDp1HwNo.13234del
>>13233
不,這個上面沒有台灣稅務的部分(而且這填寫的格式也已經是舊的東西了)
無名19/04/10(三)18:59:05 ID:RovKNrE.No.13235del
公司統編沒錯唷
無名19/04/10(三)20:15:28 ID:/Ejru/f2No.13236del
>>13235
感謝
順帶一問美國稅務表格上面的 外國TIN 也是填統編嗎?
無名19/04/10(三)20:31:33 ID:RovKNrE.No.13237del
>>13236
9b. Foreign TIN ?
我沒有填欸
錢有進來就是了
無名19/04/10(三)20:36:26 ID:/Ejru/f2No.13238del
>>13237
恩....那就放著好了...感謝

檔名:1554450541710.jpg-(76 KB, 600x545)
76 KB
無題無名19/04/05(五)15:49:01 ID:bvUqH8bsNo.13199del[回應]
突然想到一個多執行緒的問題
通常不同執行緒要讀寫同一份資料時會使用讀寫鎖去確保資料正確性
即使只是一個32bit整數也要鎖
以免讀到正在覆寫修改中的數據

但是boolean呢?
雖然體積有8bit
但實際上只有1bit是真正重要的
1個bit就只會有兩種值
那是不是對boolean變數就不用鎖了?
無名19/04/05(五)18:08:08 ID:6lB11ULUNo.13200del
整數要鎖不是因為bit會錯亂
是一行程式碼會被切成很多指令
而不同執行緒的這些指令可能是交錯的

例如i++實際上會被轉譯成類似這樣的邏輯
int reg=i;
reg++;
i=reg;

reg在不同執行緒中是分開存在的
因為硬體原理的關係,i不能直接++,只有reg才可以
而當兩條執行緒同時執行上述程式,實際順序可能是:
int reg0=i;
int reg1=i;
reg0++;
i=reg0;
reg1++;
i=reg1;

結果會變成i只++了一次

這樣的現象在布林裡面也會發生
所以布林不代表就不用鎖
實際上要不要鎖還是得看你做了什麼操作
你不會判斷那就全鎖吧

一個整數的32個bit在硬體處理時應該都是綁死一起走的,不會跟別的執行緒混在一起
無名19/04/05(五)19:05:17 ID:bvUqH8bsNo.13201del
>>13200
但是boolean單純賦值應該只有一個指令吧?
沒有計算
單純用等號塞值進去

>>你不會判斷那就全鎖吧
要鎖的話是不是這樣最便宜啊?
std::atomic<bool> reg;
無名19/04/05(五)19:27:45 ID:6lB11ULUNo.13202del
>>13201
單純的賦值不會被拆開,int也不會
但還是有其他操作可能會
例如boolean=!boolean;
無名19/04/06(六)12:05:08 ID:kFgmBgcgNo.13203del
>>13199
總覺得你知道為什麼有data race
但第二段概念又很奇怪

會不會錯亂看的也只是底層指令怎麼運作 大於一個就有出錯機會
文章概念看起來很像你以為寫32bit是從第一個bit寫到最後一個bit,中間被讀寫才造成錯亂
而布林只會改一個bit(一次動作)所以絕對正確
實際上不是這樣 硬體運算不是以bit為單位在跑

檔名:1554131367044.jpg-(20 KB, 600x365)
20 KB
java無名19/04/01(一)23:09:27 ID:.fnEETYkNo.13145del[回應]
假設我建了一個Class A extends Thread
在Class A裡面Override了 run()

然後在一個main()裡面
A a1=new A();
A a2=new A();
a1.start();
a2.start();
不太懂多執行緒的運作原理 上面的例子是如何運作的?
意思是這個main方法的執行緒跟OS要了2條新的執行緒來同時
執行a1的run()跟a2的run()嗎?
那main方法要完這2條執行緒就結束,剩下a1跟a2的2條執行緒在跑嗎?

另外為什麼如果不用start() 而是在main()裡面執行a1.run()跟a2.run()還是單執行緒? start()內部不就自動呼叫run()
到底差別在哪啊 我被搞得好亂啊
有回應 20 篇被省略。要閱讀所有回應請按下回應連結。
無名19/04/03(三)01:01:19 ID:bcYnr2VsNo.13193del
>>13187
高階語言就是這樣
「我跟你說這行什麼意思,你乖乖記得就好
 不要去管他底層是怎麼執行的,那個你玩不起」

如果你對底層實際原理很有興趣
建議你去學C
不是C++,是正面跟pointer硬幹的純C
既難學又難用、寫不出什麼好看的程式
但如果堅持下去,十年功成之後得到的東西是其他管道取代不來的
無名19/04/03(三)01:03:07 ID:oRWeYXXcNo.13194del
>>13192
沒辦法
無名19/04/03(三)01:06:23 ID:oRWeYXXcNo.13195del
>>13193
先等我Java學到能混口飯吃,我再考慮去補一些底層的
軟硬知識
無名19/04/03(三)01:07:30 ID:BZUs0hXkNo.13196del
>>13194
簡單來說,這段程式的意思就是:
我想要作改良步槍,但我不要直接用原本的步槍改。
所以我在原本的步槍裡面塞進我的改良步槍,按下原本的步槍的板機時用裝置連動到裡面的改良步槍,改良步槍子彈穿過槍管從原本的步槍的槍管射出
無名19/04/03(三)01:09:43 ID:oRWeYXXcNo.13197del
>>13191
是沒有必要 因為這範例是拿來觀察Join()的運作
只是寫這樣搞得我連Join都很難看懂

檔名:1554042902239.png-(746 KB, 600x800)
746 KB
C++無名19/03/31(日)22:35:02 ID:LoCw3BWYNo.13133del[回應]
class Player
{
public:
//friend class StateMachine;

void update();
void draw();

void setStateMachine(StateMachine* stateMachine);

//int getPosX();
//void setPosX(int posX);

private:
StateMachine* stateMachine_;
int posX_, posY_;
int velX_, velY_;
};

class StateMachine
{
public:
StateMachine(Player* player);
private:
Player* player_;
...
};

class IdleState : public ActiveStateMachine
{...};

class WalkState : public ActiveStateMachine
{...};


想要在角色上安置一個狀態機,update()會呼叫stateMachine_
角色的position與velocity修改都交給stateMachine_處理

寫一寫發現到這樣做,狀態機無法去更改class Player的私有值
friend class也無法應用在多型的狀況
如果為了要讀寫,多了一堆set與get的函式也覺得怪怪的
因為跟本不想讓外界去修改

請教大家如何解決這問題
還是狀態機根本不是這樣用的

//
順帶延伸一問
有些教學還會寫說少用繼承(is a)多用聚合(has a)
其實上面想講的也是,我聚合的元件想更改主類別的私有變數就不知道怎麼處理了
有回應 28 篇被省略。要閱讀所有回應請按下回應連結。
無名19/04/02(二)23:55:50 ID:wvNn5Cb6No.13176del
檔名:1554220550215.png-(66 KB, 420x247)
66 KB
>>13172
你可以試著把你switch裡面的邏輯抽出介面與實作後看看成品
無名19/04/03(三)00:06:38 ID:BZUs0hXkNo.13179del
>>13176
沒問題!
//TODO: Use OOP replace switch! 2019/04/03
switch(state) {
case State::Idle: {
std::cout << "\tIdle...";
state = State::Walk;
break;}
case State::Walk: {
if(step < 10) {
std::cout << "\tWalk Step " << step++;
state = State::Walk;
} else {
std::cout << "\tOk!";
state = State::Stop;
}
break;}
case State::Stop: {
run = false;
state = State::Stop;
break;}
}
無名19/04/03(三)00:09:03 ID:Rku4lbOcNo.13180del
檔名:1554221343162.png-(92 KB, 900x700)
92 KB
>>13179
說謊不打草稿阿!!!!下次檔案異動就是2029了吧!?
無名19/04/03(三)00:14:02 ID:bcYnr2VsNo.13181del
>>13175
>>Monster、NPC、Player都繼承Object,差別在可不可以被控制
這個就是封裝、多型的用處

試想
如果Monster沒有MP條的概念
而有某個State會持續扣MP
這個StateMachine如何兼顧Player與Monster的處理?

如果你讓他直接player_->mp-=10;
那你可能要為Monster重寫一份不扣mp的,而且中狀態的時候還要判斷Monster要改中別的狀態
或是每次扣mp時都多一個if判斷當事人是不是Monster
或是你要在Monster裡面塞一個完全用不到的隱型mp讓他扣

但如果你把Object的私有成員都封裝化,答案就會變得非常簡單:
讓Monster擁有一份自己的reduceMP,裡面是空的什麼都不做,只有Player::reduceMP才會真的扣MP
StateMachine只管呼叫player->reduceMP(10)就好
至於對方到底會不會真的扣MP,甚至對方扣了MP後會不會觸發什麼別的事件 (MP盾失效)
通通都不用讓StateMachine來煩惱
無名19/04/03(三)00:23:42 ID:Rku4lbOcNo.13183del
檔名:1554222222788.png-(139 KB, 800x473)
139 KB
>>13181
你應該是少提兩點
1.Object建議要改名
2.reduceMP記得寫一個宣告在"Object"

檔名:1554198157961.gif-(2045 KB, 308x307)
2045 KB
無題無名19/04/02(二)17:42:37 ID:dLpXYWhcNo.13152del[回應]
有什麼文字編輯器可以開個側邊欄顯示資料夾下的檔案?
目前用過Geany的這個這個功能就戒不掉了
清楚資料夾結構就能很快的找到文件
Eclipse有類似效果
但是非IDE也可以這麼做的好像只有Geany
vim好像也可以,不過那東西對我而言太硬派了
無名19/04/02(二)18:12:14 ID:94Hn55KQNo.13153del
Notepad++不敗神話
https://github.com/funap/npp-explorer-plugin

粗乃丸探頭.jpg
無名19/04/02(二)19:43:42 ID:dLpXYWhcNo.13154del
>>13153
如果不是因為Notepad++只有Windows版的話
我應該會從學生時代一直用到現在
無名19/04/02(二)19:53:42 ID:wvNn5Cb6No.13155del
檔名:1554206022233.png-(24 KB, 900x600)
24 KB
無名19/04/02(二)20:53:53 ID:dLpXYWhcNo.13158del
檔名:1554209633584.png-(53 KB, 150x587)
53 KB
Geany還有個特色是tab可以排直的(如附圖)
這麼實用的功能卻很少見
印象中sublime還是madedit好像有
文字編輯器這種東西還真是合胃口比較重要
今天裝了vscode也是滿頭問號
outline有明顯bug就算了
開個資料夾還生產*.bin放資料夾裡頭(雖然git可以無視掉)
用沒多久就砍掉了

檔名:1553882320183.jpg-(17 KB, 496x280)
17 KB
無題無名19/03/30(六)01:58:40 ID:x9oVh5SENo.13129del[回應]
java I/O疑問
File outputfile=new File("E:\\number.txt");      
FileOutputStream fos=newFileOutputStream(outputfile,false);

int randomnum=0;
for(int i=0;i<=5;i++) {
randomnum=(int)(Math.random()*1000)+1;
fos.write(randomnum);
}
fos.close();

為什麼印出來的txt檔內容會是亂碼?
是MS-950跟UTF-8的問題嗎?
無名19/03/30(六)12:02:34 ID:lm0ha/CkNo.13130del
跟編碼無關,因為你這目前只有用到ASCII的字元
問題在於 fos.write(randomnum);
這邊的 write 並非是寫入文字,而是寫入字元的byte
換句話說他把你的 randomnum 當作 byte 來處理了

改成下面的寫法可以直接解決掉這個問題
fos.write(Integer.toString(randomnum).getBytes());
無名19/03/30(六)14:24:42 ID:dEK1/4AsNo.13131del
>>13130
感謝
另外想問
如果fos的append改成false 為什麼不會是下一個數字覆蓋前一個
數字而是繼續在同一行往後寫?
是因為迴圈中fos一直開著的關係嗎?
無名19/03/30(六)15:44:45 ID:tlKvFCzQNo.13132del
>>13131
fos向來都是繼續往後寫
覆蓋前一個這種功能根本沒有人會用到吧...
你要覆蓋的話蓋到變數上面最後再一次輸出不就好了

append指的是
如果那個指定的檔名本來就存在
如果append==false,會把本來的檔案清空、從頭開始寫
如果append==true,會從本來的檔案的尾端接著繼續寫

你可以連續執行這個程式兩三次
然後把append開了再試試看有什麼不一樣

檔名:1553254108412.jpg-(81 KB, 686x960)
81 KB
無題無名19/03/22(五)19:28:28 ID:t5rKxn2kNo.13117del[回應]
我又來問個基本的C++問題了
當你們要highlight一行程式碼時會怎麼做?
編譯期的報錯會由編譯器跟你講錯哪裡
但是執行期的錯誤呢?

這需求類似assert的行為
但是我不要它直接中斷程式
我希望是單純告知我在哪裡就好

我目前是這樣寫
#define ERROR_MESSAGE_HERE __FILE__,__LINE__

inline void highlight(const char *name,int number)
{std::cout<<"File: "<<name<<"_"<<" Line "<<number<<std::endl;}

哪裡有問題就安插個highlight(ERROR_MESSAGE_HERE);
直覺上我應該不需要這樣自己造輪子
這功能明明很實用啊
標準庫怎麼沒有?
無名19/03/22(五)19:56:51 ID:t5rKxn2kNo.13119del
https://stackoverflow.com/questions/37473/how-can-i-assert-without-using-abort
這篇下面的回覆也是各種DIY
滿滿的macro臭味
無名19/03/23(六)00:07:31 ID:A71kzypcNo.13120del
檔名:1553270851645.png-(411 KB, 900x900)
411 KB
原來C++沒有StackTrace嗎?也太慘了吧?
無名19/03/24(日)23:26:35 ID:YHrB7m0sNo.13123del
>>13120
標準庫沒有...你真的要的話可以用 boost::stacktrace 或者
Linux:
int backtrace(void **buffer, int size);

Windows:
USHORT WINAPI CaptureStackBackTrace(
_In_ ULONG FramesToSkip,
_In_ ULONG FramesToCapture,
_Out_ PVOID *BackTrace,
_Out_opt_ PULONG BackTraceHash
);
無名19/03/25(一)11:40:37 ID:yarQ8mUoNo.13125del
>>13123
這東西還真是微妙啊
我大多是下中斷點來追stack
不怎麼需要將它們印出來
但是如果遇到那種需要測試一段時間才能出現的bug
boost::stacktrace好像又變的好用了
無名19/03/25(一)19:42:27 ID:GxEQAKHYNo.13128del
檔名:1553514147953.png-(92 KB, 467x468)
92 KB
>>13125
俗話常說(好吧,新手應該無法體會)

【看的見的錯誤(紅字),都不算是錯誤,只能算是TODO】

檔名:1553505319350.jpg-(359 KB, 1000x669)
359 KB
無題無名19/03/25(一)17:15:19 ID:yarQ8mUoNo.13126del[回應]
C++要抓效率瓶頸時有哪些慣用手段啊?
這本來應該是必備技能
不過我一直都沒去學
工作上寫到沒bug就謝天謝地了
根本沒心力去講究這個

我查到工具裡面看的比較順眼的只有GNU profiler
用法夠簡單
GCC內部支援
無名19/03/25(一)18:25:51 ID:yarQ8mUoNo.13127del
頑皮狗的主工程師推薦的是IBM出的PurifyPlus
QT官網介紹的又是另外一票了
https://wiki.qt.io/Profiling_and_Memory_Checking_Tools
不知道要先跳哪個坑

無題無名19/03/24(日)19:06:56 ID:LJIfnLgcNo.13122del[回應]
請問有島民會從google試算表中的某一格抓數字出來到網頁上顯示嗎...?
無名19/03/24(日)23:37:29 ID:YHrB7m0sNo.13124del

檔名:1553180326273.jpg-(110 KB, 640x386)
110 KB
無題無名19/03/21(四)22:58:46 ID:Pbnt9WP2No.13109del[回應]
讀入:source->FileInputStream->BufferedInputStream
寫出:PrintStream->BufferedOutputStream-
->FileOutputStream->Dest
讀入跟寫出一次最大能處理的資料量還不是看FileInputStream跟
FileOutputStream
多接了Buffered會變快只是因為減少了CPU的I/O時間?
但是除了CPU的I/O時間 其他傳輸的部分沒有變快沒錯吧?
也就是說資料從讀出或寫入到記憶體的這段流程,有沒有Buffered時間都是一樣的,但是加Buffered減少了CPU的I/O次數,所以速度
提升,不知道我這樣理解有沒有錯?

然後寫出的部分我有點疑問 最後寫到Dest還是用
FileOutputStream慢慢刻,那輸出是在資料流的哪個部份變快了?
無名19/03/21(四)23:54:10 ID:P/XWd7rANo.13111del
File I/O本身是有固定成本的
你讀1000Byte花在File Input上的時間不會是讀1B的1000倍
讀1次1000B比讀1000次1B還快上許多
Buffer讓你減少File I/O的次數,而這次數就是效能的瓶頸
無名19/03/22(五)00:02:23 ID:cilbFJ4QNo.13112del
>>13111
我原po
減少是減少CPU花在I/O的次數跟時間?
但是通道大小是不變的吧?不會因為接了Buffered結果末端通道從一次能處理1個byte變成2個bytes
無名19/03/22(五)00:05:22 ID:Oq4PUKxENo.13113del
檔名:1553184322096.png-(123 KB, 997x1420)
123 KB
這東西就好像你把A房間的東西搬到B房間

你需要開門 , 送貨 , 關門。
你當然可以一次開關們就把東西全部搬過去,
但可能你的運貨推車會炸掉,
因此你的推車容量上限就是你的Buffer,
當然安全一點就是推車送的東西少少的,多運幾次。
(但多運幾次同時代表會需要多開關幾次門)
無名19/03/22(五)00:12:29 ID:xcXJwWe6No.13114del
>>13112
Buffer不會讓你的通道變大
但不Buffer會讓你浪費一堆無謂的時間
開了Buffer只是把這些浪費的時間撿回來,不會超過本來的通道上限
無名19/03/24(日)11:29:07 ID:iiUU6u0cNo.13121del
檔名:1553398147043.jpg-(149 KB, 1116x1600)
149 KB
>13114
那不是目的
很少有人在他們的代碼中需要buffer,除非他們想要使用他們自己版本的編輯器或表格。 最簡單的編輯器是二度空間buffer linked list。 你輸入的字暫時存在buffer,你可以選擇不點擊送出按鈕,它會消失

檔名:1553142976955.jpg-(546 KB, 1167x1500)
546 KB
無題無名19/03/21(四)12:36:16 ID:frvlz13YNo.13102del[回應]
來問個比較基本的C++問題
很多函式庫有自己的整數型別
不會跟你講明是多少bit
例如標準庫的std::string::size_type就是
雖然十之八九用int32_t去處理是ok的
但就是怕萬一
怕不同平台有不同的規格
各位在型別轉換時有什麼好方法嗎?
有什麼慣用手法來檢查嗎?
有回應 3 篇被省略。要閱讀所有回應請按下回應連結。
無名19/03/21(四)19:47:17 ID:frvlz13YNo.13106del
>>13105
這種極端狀況會自己拋錯誤?
依然要我自己檢查吧?

>>程式碼切得夠好就不會有很醜的問題
有在想這麼做
專寫一系列同名的函式去判斷數值能不能無損賦值
只是覺得島民也許會有比較有經驗的做法
所以才上來問的
無名19/03/21(四)21:24:29 ID:P/XWd7rANo.13107del
除非你寫的是出錯一次會虧幾千萬的重要大案
或是你的資料整天走在溢位邊緣
不然我是傾向當作沒看到硬轉,等真的爆了再說

或是假設它的實際型態為某種慣用的int
然後叫編譯器幫你注意你是不是猜錯了
編譯器噴error你再來看要怎麼轉換
無名19/03/21(四)22:46:07 ID:BfL7CHK6No.13108del
>>13107
如果要處理那種好幾G的大檔案很容易遇到吧?

>>等真的爆了再說
這種不定時炸彈處理起來最痛
都要玩好一陣子才會看到bug
安插幾個printf進去
編譯個幾次
玩個幾回
一天就過了==
無名19/03/21(四)23:33:49 ID:P/XWd7rANo.13110del
>>13108
>>好幾G的大檔案
那就是遊走溢位邊緣啊
只能認了乖乖檢查

編譯時或執行開頭統一檢查所有型態是否如同預期、
把外部函式庫都包一層,檢查完是否溢位再傳出去、
再不然整個函式庫用自己確定能用的型態重寫...


我自己的習慣是一律使用預設的signed int32
21億很夠日常使用了
程式內部的交流基本上不會出現那麼大的數字,完全不做檢查
少數幾個會超出或瀕臨上限的資料另外做特例處理,例如分割成多個小塊
來自外部的輸入則先給一個看起來合理的上限,例如數萬,有人越線了再專案列管
列管時也要考慮那個資料到底正不正常,有時你需要的是拒絕他而不是讓自己配合他

高階程式語言的大概念就是程式好寫好修比起字字句句雕琢到完美還重要
你認為不太可能會發生的事情就不要花太多心力處理,只做簡單的攔截、回報就好
等真的出包了再來認真修
不要還沒遇到實例就自己嚇自己,整天擔心轉型溢位把開發進度丟到一邊去

附帶一題我個人認為用unsigned處理太大的資料非常愚蠢
除非你在玩bit運算或剛好你的資料就是精確地落在那個範圍,或是配合函式庫
不然會遇到3G的使用環境遲早也會讓你遇到5G,多一個bit不會讓你多活多久
int32不夠就該直接上int64,不要讓遊走int32邊緣的資料繼續在uint32邊緣游走
無名19/03/22(五)19:33:04 ID:t5rKxn2kNo.13118del
>>13105
>>13110
其實我今天實作之後
看起來也還好

a=b;
變成
a=func<decltype(a)>(b);
出問題就throw個異常出來
C++11新增的語法真的太重要了

檔名:1552656321560.jpg-(40 KB, 520x740)
40 KB
無題無名19/03/15(五)21:25:21 ID:lmiOY2ecNo.13066del[回應]
最近想在程式碼堆裡搜尋一段文字時遇到了麻煩
當我想搜尋包含換行字元的關鍵字時
該怎麼做?

例如我下面這情況
我只記得那段寫了這樣的東西
try{
return std::string ...
只搜 return std:: 這句可能會找到太多符合條件的結果
但我很確定 try 後面就return一個字串物件的地方非常非常少
所以把上一行也加進來一起搜會好找很多

有想過在shell script裡面使用grep+regex啦
不過沒成功
notepad++有搜尋整個資料夾的功能
但是又只能找單行
有回應 3 篇被省略。要閱讀所有回應請按下回應連結。
原PO19/03/16(六)14:31:10 ID:dUV0BJAoNo.13074del
>>13069
>>13073
好的
我去眼科掛號了
無名19/03/16(六)22:54:25 ID:RIMyk.76No.13078del
>>13068
github的搜尋爛到爆啊
無名19/03/20(三)10:21:17 ID:bhV03rc2No.13100del
perl
無名19/03/20(三)20:44:31 ID:rybz4eKcNo.13101del
改用 VSCode
無名19/03/22(五)03:50:44 ID:FANUrhLkNo.13115del
我覺得你的問題更可能在不熟 regex?

try\w*{[\r\n]*\w*return\w*std::

檔名:1552887517623.gif-(88 KB, 220x202)
88 KB
無題菜比八19/03/18(一)13:38:37 ID:G6T1KkN2No.13089del[回應]
各位前輩好,想請教個比較概念的問題。

我目前專案中有個目錄名為 module ,根據老大的解釋裡面是放可隨意拆裝的功能塊,其中有 Logger 、 MQ 、 Metrics 等。

以我的理解,可以隨意拆裝應該是指即使移除或是替換成別的都應該不影響 App 執行才對,但在程式碼中常常會有:

func doSomething() {
// ...
if err != nil {
logger.Info(err)
}
}


這樣到處都有使用 Logger 提供的 func 程式碼存在,怎麼可能拆除也不影響呢?

不好意思敘述有點長,我想問的是在程式設計中," 模組( Module ) " 到底是什麼?看實際用起來跟依賴套件似乎沒有實際的差別,還是說這其實是一樣的東西不同的名詞呢?

還望島民指教提點,非常感謝!
有回應 5 篇被省略。要閱讀所有回應請按下回應連結。
無名19/03/18(一)21:23:44 ID:HTK/Gy/6No.13095del
檔名:1552915424152.png-(32 KB, 800x600)
32 KB
>>13094
>一般專案會有 module 這個目錄嗎
可能有,不過這不是你應該在意的地方。

>只是真的聽不懂,只理解到可以拆裝的功能就是模組
別擔心,這種問題你問10個工程師會有11種答案。
你只要在意這個架構/分類你覺得好不好用(維護/開發)就可以了。
無名19/03/18(一)22:03:57 ID:/6wTNJTgNo.13096del
什麼叫做整篇移除也不會造成任何影響、也不在其他地方被呼叫的程式碼?
我想八成是永遠不會被執行到的程式碼吧

模組化的概念指的是
你可以替換少數幾個檔案就把該功能的行為整個換掉
而不需要去每個呼叫他的地方修東修西
像你的logger.Info(err)本身沒有暗示這err是要被記錄在檔案裡、顯示在螢幕、還是傳給伺服器
一切只看logger裡面怎麼實作
哪天你們想要改變logger的執行方式時只要改logger就好,不需要改到logger.Info(err)這行
這個就是模組化
如果你寫成logger.print(err.toString())
那你以後想要改用字串以外的方式做log就會吃很多苦頭,就是不模組化

模組化通常只支援替換,而不支援「拆除」
畢竟那毫無意義,真的想拆大不了寫一個空的模組裝上去就好
沒必要硬是設定成可以拆而不裝

>>也就是第三方的函式庫稱為套件,我們自己包裝、撰寫的稱為模組這樣嗎?
這也是一種模組化
如果你在你們的程式碼裡到處寫像是 MicrosoftWindows.writeFile("...") 這樣的東西
也許哪天就會全公司加班把他們通通改成 Ubuntu.file_print("...") ,還要擔心會不會睡眠不足改出BUG
不如一開始就多包一層,哪天要換平台時只要改包的那層裡面就好

>>那可以問問一般專案會有 module 這個目錄嗎?
我個人不會取這種名字
取這名字不就代表你們其他的程式碼都不模組化嗎
無名19/03/18(一)22:24:20 ID:HTK/Gy/6No.13097del
檔名:1552919060721.png-(244 KB, 1000x1000)
244 KB
>>13096
>替換少數幾個檔案就把該功能的行為整個換掉
這個叫做邏輯抽離

>logger裡面怎麼實作
沒錯,這就是界面區隔與實作

>就是模組化
感謝你貢獻第一種答案

>不如一開始就多包一層,哪天要換平台時只要改包的那層裡面就好
寫成static呼叫或是factory註冊更方便喔

>不就代表你們其他的程式碼都不模組化嗎
很遺憾,有些架構規範就是要給你結尾module,有時這不是開發者能決定的事情
菜比八19/03/19(二)11:11:36 ID:QQGgvslMNo.13098del
>>No.13095
因為屬於那種有在意的問題不解決就很難受的類型,不過我大概懂 module 目錄跟我想的不同,不是說在裡面的才稱為 module


>>No.13096
似乎有一點明白了,這樣來看有部分套件也屬於模組。

只要規定好溝通的介面與隱藏實作(或稱抽離?),應該都屬於模組。
感謝熱心島民的指教,我想模組應該是種強力封裝,並提供了對外介面的功能組。
因為程式碼內用的是模組介面,所以不用擔心實作的替換。

模組描述看來就是程式的基本設計原則啊⋯⋯想不到竟然為了這個困擾這麼久
無名19/03/19(二)20:32:14 ID:sqLok2V2No.13099del
檔名:1552998734727.png-(54 KB, 600x600)
54 KB
>>13098
恭喜你找出並提供了第二種答案

檔名:1552478050340.jpg-(7 KB, 250x214)
7 KB
Java scanner一問無名19/03/13(三)19:54:10 ID:AqCCRy.2No.13056del[回應]
想請問 如果我宣告2個int變數為num1,num2
然後開scanner 該怎麼讓scanner認為數字與數字之間的空白鍵
是代表我輸入了2個整數?
舉例來說就是:輸入25 空白鍵 50 如何讓25跟50分別指定給num1
跟num2? 要開2個scanner?
有回應 13 篇被省略。要閱讀所有回應請按下回應連結。
無名19/03/17(日)17:19:08 ID:pTJOYbqgNo.13084del
>>13083
縮排的問題...我再去設定code style改改
無名19/03/17(日)20:00:51 ID:PxRMPYiANo.13085del
>>13083

>沒事不要用try catch,就算catch了也要throw出去。
有點好奇, try-catch 不是為了處理錯誤嗎?還是因為原 PO 剛學所以才建議少用呢?
無名19/03/17(日)20:15:35 ID:JQofJkUQNo.13086del
檔名:1552824935759.png-(60 KB, 400x400)
60 KB
>>13085
真實的系統理論上會有一個專門處理Exception的Handler,
而新手濫用try catch容易造成一個壞習慣【錯誤不爆出就沒事了】,
然後就開始濫用try catch之路了。

並且,當Exception發生時,最好的處理就是不要特別處理他,
這樣才能順著stack trace回追問題點。

不過這些東西對於剛學程設的人應該是聽不進去也不懂啦,
所以也不用放在心上,時候到了自然會有人電你。
無名19/03/17(日)20:38:15 ID:lu2I63AsNo.13087del
個人來說
要不要用try catch處理錯誤要根據程式會跑多久而定
如果程式只會跑幾秒就結束(初學差不多都這樣),那不處理也不是什麼問題,反正出事了就debug
但如果程式會跑幾個小時或幾天幾個禮拜那種,你不會希望跑了老半天的結果因為一個小bug而毀掉,所以才需要好好處理錯誤,讓程式能繼續跑
雖然每隔一段時間就自動把結果存起來也是好方法,但沒保證存的過程中不會爆炸,所以還是需要處理錯誤
無名19/03/22(五)13:55:27 ID:dPLL/95MNo.13116del
>>13087
個人經驗是通常exception發生的情況已經是超出你的error checking涵蓋的範圍(或是說你邏輯沒想到的範圍). 是必須要trace哪個點出問題. 就算你用try-catch抓起來繼續跑大多事後結果也是不準確的.


【刪除文章】[]
刪除用密碼:
[0] [...][4] [5] [6] [7] [] [9] [10] [...][29]