2010/04/07

[QT creator] Text Editor設定

安裝QT creator好後,我們接下來更改一下預設的設定,讓程式用起來更方便。

1. 由於寫程式常常需要長時間撰寫,所以把背景顏色改得不要那麼亮,比較不會刺眼,並且把字型設定成Verdana會看的比較清楚。點選【Qt creator】->【Tool】->【Options】->【Text Editor】->【Font & Colors】,上方就可以設定字型,點選在下方的【Text】並按右邊的【Background】就可以選擇背景顏色。

font_color

2. 設定tab對齊。

點選【Behavior】,取消【Insert sapces instead of tabs】

tab

3. 自動完成程式碼。

原本自動完成程式碼(Code completion)是case-sensitive(區分大小寫),把它取消掉會讓你寫程式方便不少。

auto_complete

4. Screenshot如下。

screenshot

2010/04/05

使用TeamViewer遠端控制電腦(不需要public IP)

1. 在雙方電腦下載TeamViewer,並安裝:

2010-04-05_221142

2010-04-05_221154

2010-04-05_221203

2010-04-05_221534

2010-04-05_221257

2. 註冊帳號。

如果雙方都沒有public IP,那就要先建立帳號,由此帳號可以顯示對方ID,才可以進一步連線。到這邊註冊。

2010-04-05_222422

3. 被控端的設定

3.1在程式上方點選Extra->Options,然後再Geneal頁面設定Icoming LAN connections: accept

2010-04-05_215639

3.2設定一個固定的密碼:在Security設定Password。

2010-04-05_214412

4. 雙方登入帳號:點選右下角的:Partner list可以顯示登入視窗。記得勾選自動登入選項,如圖所示。

2010-04-05_221710

5. 進行連線

雙方登入後,你就可以看到ID了,選擇遠端的ID(就是跟本端的ID不同那個)。這邊注意的是,不可以接在ID上點二下,不然還要等待遠端的同意才可以連線。

而是,我們在Create session裡面輸入遠端ID,然後輸入在步驟3.2設定的密碼即可連線成功。

2010-04-05_220449

[C++] implicit type conversion

Case1: implicit type conversion in normal function

#include <iostream>
#include <string>
using namespace std;

/* string Constructor
explicit string ( );
string ( const string& str );
string ( const string& str, size_t pos, size_t n = npos );
string ( const char * s, size_t n );
string ( const char * s );
string ( size_t n, char c );
template<class InputIterator> string (InputIterator begin, InputIterator end);
*/

void foo(string s)
{
    cout << s;
}

int main()
{
    char s[] = "1234";
    foo(s);
    return 0;
}

上面的例子中,我們在main裡面宣告依個char s[],再把此array的pointer s傳到

void foo(string s),但是問題來了,因為foo的參數式string s,但是main傳入的是char * s,型態不同怎可以傳遞呢?

這是因為main的char * s在傳給foo的string s會呼叫其建構子

string ( const char * s );

因此char * s當作參數傳給string的建構子,初始化此物件後就成為foo的 string s。

 

Case2: implicit type conversion in constructor

#include <iostream>
#include <string>
using namespace std;

class ClassName
{
private:
    int x;
public:
    ClassName(int x){this->x = x;}
};

int main()
{
    int n=3;
    ClassName a(1);
    ClassName b(2);
    a = b; // ok.
    a = n; // ok. 
    n = a; // error
}

同樣的情況,在作物件本身的assignment(=)時也會出現同樣的情況。

1.

a = b;

左邊的type為ClassName,右邊的type為ClassName,所以沒問題。a裡的所有變數都會成跟b一樣,也就是a的x等於2。

2.

a = n;

左邊的type為ClassName,右邊的type為int,這是時候系統就會使用Implicit type conversion in constructor。3會傳到建構子ClassName(3),所以a裡的x等於3。

3.

n = a;

左邊的type為int,右邊的type為ClassName。由於int沒有其他constructor可以轉換其他物件。所以右邊的ClassName造成int不知道怎麼處理。

2024年React state management趨勢

輕量化 在過去Redux 是 React 狀態管理的首選函式庫。 Redux 提供了強大的功能和靈活性,但也帶來了一定的學習成本和複雜度。 隨著 React 生態的不斷發展,越來越多的開發者開始追求輕量化的狀態管理函式庫。 Zustand 和 Recoil 等庫以其簡單易用、性...