以下程式使用 MinGW 8.1.0 64位元版(x86_64-posix-seh) 編譯
採用 Release 和 Debug 兩種模式編譯的執行結果不一樣(另人傻眼)
本來想說是不是編譯器的 bug,但有以下的訊息:
the compiler can assume that the address of 'p' will never be NULL [-Waddress]
更另人傻眼了
2020年3月3日 星期二
2020年2月21日 星期五
武漢病毒酒精稀釋公式推導
由於 75% 消毒用酒精缺貨,若能拿到 90% 清潔用酒精來稀釋也是個辦法,不過不可以直接使用自來水,而是要用 RO 過濾水。以下是稀釋公式的推導。
首先須釐清問題已給出的相關資料:
首先須釐清問題已給出的相關資料:
- 溶液(Solution)是指含有溶質(Solute)和溶劑(Solvent)的混合物,即
溶液 = 溶質 + 溶劑 - 溶度(Solubility) 為 $\frac{溶質}{溶液} \times 100\%$
2020年2月16日 星期日
為 blog 加上數學公式
請先參考 http://white5168.blogspot.com/2016/06/blogspot-mathjax.html#.XkChakBuIkF
為防失連 JavaScript 這裡備份一份:LaTeX JavaScript 支援.txt
而在 blogger 的設定方法,到後台如下操作:
為防失連 JavaScript 這裡備份一份:LaTeX JavaScript 支援.txt
而在 blogger 的設定方法,到後台如下操作:
▲把 LaTeX JavaScript貼在<head>......</head>中
2020年1月15日 星期三
2019年5月18日 星期六
LifeCustody 物件終結插件
CxxlMan2 程式庫的核心主要建構在垃圾回收(Gabage Collector)機制,藉由 cxxlObject 和
Smart_Ptr 的相互搭配,達到 cxxlObject 物件無 Smart_Ptr
持有時就會自動銷毀,但若有某些原因,要讓物件不想被繼續使用了,如何通知各 Smart_Ptr 放棄持有呢?這個插件就為了達成這樣的目的。
下載點:
LifeCustody_Src_20200430.zip
下載點:
LifeCustody_Src_20200430.zip
2018年10月26日 星期五
插件成了 header only 的罩門
什麼是 header only? 可以先看此文了解一下 http://zevoid.blogspot.com/2012/04/c11-extern-template.html
簡單的說,header only 是把一個 class 的程式碼就包含在這個 class 中,而這個 class 就放在引入檔(.h)中供大家使用。有別於引入檔只放 class 介面,程式碼則放在 .cpp 中。
header only 的好處是執行快,因一大部份的函數可以用 inline 的方式呼叫,另外也不用再加 .cpp 或是還要連結程式庫(lib 或 dll)。
但有一個不得不面對的問題,class 的程式碼因不放在特定的 .cpp 中,那麼使用它的模組(exe、lib、dll)都得編譯出各別的執行碼,一般來說除了程式會比較胖之外,也沒有其它不好的影響。但是遇到插件就出問題了。
插件是一個 dll 檔,特點是要用的時候才載入,不用的時候可以卸載,但若某一個 class 產生的物件,其執行碼在那個被卸載的 dll 中,就會出大問題了,以下範例程式就是在演示這種情況。
簡單的說,header only 是把一個 class 的程式碼就包含在這個 class 中,而這個 class 就放在引入檔(.h)中供大家使用。有別於引入檔只放 class 介面,程式碼則放在 .cpp 中。
header only 的好處是執行快,因一大部份的函數可以用 inline 的方式呼叫,另外也不用再加 .cpp 或是還要連結程式庫(lib 或 dll)。
但有一個不得不面對的問題,class 的程式碼因不放在特定的 .cpp 中,那麼使用它的模組(exe、lib、dll)都得編譯出各別的執行碼,一般來說除了程式會比較胖之外,也沒有其它不好的影響。但是遇到插件就出問題了。
插件是一個 dll 檔,特點是要用的時候才載入,不用的時候可以卸載,但若某一個 class 產生的物件,其執行碼在那個被卸載的 dll 中,就會出大問題了,以下範例程式就是在演示這種情況。
2018年10月25日 星期四
[轉貼分享]將巨集展開後連結
https://stackoverflow.com/questions/6669551/converting-string-macros-constants-to-wide-characters-unicode
#define WIDEN(quote) WIDEN2(quote)
#define WIDEN2(quote) L##quote
#define VERSIONSTR "Test V1.2.3"
#define VERSIONSTRW WIDEN(VERSIONSTR)
#define WIDEN(quote) WIDEN2(quote)
#define WIDEN2(quote) L##quote
#define VERSIONSTR "Test V1.2.3"
#define VERSIONSTRW WIDEN(VERSIONSTR)
**補充說明**
搞懂了,原來 C++ 的巨集參數採用量子疊加技術,看這例子
#define WIDEN(quote) string xx##quote = quote
#define VERSIONSTR "Test V1.2.3"
#define VERSIONSTRW WIDEN(VERSIONSTR)
WIDEN(quote) 的 quote 是兩種狀態的疊加 -- VERSIONSTR + "Test V1.2.3"
若 quote 是單獨使用會塌縮成 "Test V1.2.3"
若 quote 和 ## 或 # 一起使用會塌縮成 VERSIONSTR
現在可以解釋原題了
#define WIDEN(quote) WIDEN2(quote) // 會展開成 WIDEN2("Test V1.2.3"),已無疊加
#define WIDEN2(quote) L##quote // 會展開成 L"Test V1.2.3"
#define VERSIONSTR "Test V1.2.3"
#define VERSIONSTRW WIDEN(VERSIONSTR) // VERSIONSTR 和 "Test V1.2.3" 的疊加
#define WIDEN(quote) string xx##quote = quote
#define VERSIONSTR "Test V1.2.3"
#define VERSIONSTRW WIDEN(VERSIONSTR)
WIDEN(quote) 的 quote 是兩種狀態的疊加 -- VERSIONSTR + "Test V1.2.3"
若 quote 是單獨使用會塌縮成 "Test V1.2.3"
若 quote 和 ## 或 # 一起使用會塌縮成 VERSIONSTR
現在可以解釋原題了
#define WIDEN(quote) WIDEN2(quote) // 會展開成 WIDEN2("Test V1.2.3"),已無疊加
#define WIDEN2(quote) L##quote // 會展開成 L"Test V1.2.3"
#define VERSIONSTR "Test V1.2.3"
#define VERSIONSTRW WIDEN(VERSIONSTR) // VERSIONSTR 和 "Test V1.2.3" 的疊加
訂閱:
文章 (Atom)