4 通用工具

2021-06-18 12:50:29 字數 1759 閱讀 9434

std::make_pair(42,'a')可代替std::pair(42,'a')

std::auto_ptrptr1(new classa);     //ok

std::auto_ptrptr2 = new classa; //error,不允許賦值初始化

std::auto_ptrptr3 = ptr1; //ok,同時擁有權轉移

1、設計動機:防止異常發生時發生資源洩露

2、auto_ptr擁有權的轉移:copy建構函式和assignment操作符會使擁有權發生轉移。

注意:auto_ptr不能以pass by reference的方式傳遞引數,因為通過reference而獲得auto_ptr的函式,無法預知擁有權是否會轉交;而以pass by value方式可以確保擁有權一定被轉交,但這也帶來缺陷。const auto_ptr可以保證無法更改或交出擁有權,但*ptr可以改變。

4、缺陷

不能共享擁有權;不可以指向array;不是引用計數型指標;不滿足stl容器對其元素的要求。

5、實現中的轉型操作

左值表示程式中必須有乙個特定的名字引用到這個值。

右值表示程式中沒有乙個特定的名字引用到這個值。

顯式生成(t())的臨時物件和函式的返回值(除了有的函式返回引用),都是右值,如std::list();std::string(「it is a rvalue!」);int fun1() {}//call by value

。非左即右(但是c++11標準中此原則已不適用,實際上沒有auto_ptr了)。

如果需要拷貝的物件是乙個rvalue,而rvalue是不能轉換成reference傳遞進函式的,只能被轉換成const reference。這出現了auto_ptr_ref這一解決方案。

分析左值和右值

如numeric_limits::max();     //對應於或中的int_max

numeric_limits::min();       //對應於或中的flt_min

1、min()/max()

namespace std

templateinline const t& max(const t& a, const t& b, compare comp)

}//comp()接受兩個引數進行比較,判斷第乙個引數是否小於第二引數,例如:

bool int_ptr_less(int* a, int* b)

return *a<*b;

2、swap():可參考《effective c++》

定義於std::rel_ops這一次命名空間中,使用時加上using namespace std::rel_ops;

//using namespace std;並不會將次命名空間也包含進來

注意:只要在類中對==和《這兩個操作符進行過載,std::rel_ops中操作符過載是根據這兩個進行呼叫的。

1、定義了null,size_t(無符號),ptrdiff_t(有符號,表示指標之間距離),offsetof(成員在struct和union中的偏移量)。

2、定義了exit(int status)(退出程式,清空緩衝區,呼叫atexit()登記的函式,注意不會銷毀區域性物件);

exit_succuss,exit_failure(程式退出狀態);

abort()(直接退出程式,不做清理工作);

atexit(void (*function)())(退出程式時呼叫)。

Vue 通用工具 彈窗

最近在寫vue的專案,有一些元件是通用的,就單獨拎出來寫了。彈窗元件 檔案層級 1 tools 1.1 popup.vue 1.2 inded.js popup.vue test v if show class flag fade in fade out class class div div te...

解決中文亂碼通用工具

配置filter解決亂碼問題,記得要在web.xml裡面配置,別的就不需要變化了 通用編碼解決方案 public class genericencodingfilter implements filter public void dofilter servletrequest request,ser...

《C 標準程式庫》 第4章 通用工具

第1 3章 略 std pair 是乙個 struct 定義於 bits stl pair.h 檔案中,被包含進 標頭檔案中。std make pair 42,相當於 std pair 42,std pair p std make pair 42,3.3 42,3 任何函式需要返回兩個值,必須使用 ...