-
const 用在成员函数后 (不可以用在static 函数和非成员函数)
class aa { public: int value; int getValue() const; }
表示在getValue() 不可以修改类的成员。如修改 value,会导致报错。
-
weakptr 作用
- 对象被析构了,weakptr会自动等于nullptr
- weakptr可以还原成sharedptr而不会让引用计数错乱
- weakptr.lock() 转化为sharedptr
-
enum class/enum struct
这是C++ 11 引入的。传统 enum 关键字作用域是全局的。enum class A { my_enum3 = 0, }; A a = A::my_enum3; //用的时候要加上作用域
同时可以明确底层数据类型
enum class A: int /** 每个枚举都是int类型的 */ { my_enum3 = 0, }; enum class B: unsigned char /** 每个枚举都是unsigned char类型的 */ { my_enum3 = 0, }; int my_int = A::my_enum3; /** 错误,无法通过编译 */ int my_int = static_cast<int>(A::my_enum3); /** 正确, 可以通过编译 */
-
一些判断方法
- 判断类型
#include <type_traits> #include <iostream> #include <typeinfo> using namespace std; class AA{}; class BB{}; int main() { int i = 4; int &&n = 6; cout << is_rvalue_reference<decltype(n)>::value << endl; cout << is_lvalue_reference<decltype(i)>::value << endl; cout << is_reference<decltype(i)>::value << endl; AA a; BB b; cout << typeid(a).name() << endl; cout << typeid(b).name() << endl; AA c; auto a_vs_c = typeid(a).hash_code() == typeid(c).hash_code(); auto a_vs_b = typeid(a).hash_code() == typeid(b).hash_code(); cout << "a_vs_c: " << a_vs_c << endl; cout << "a_vs_b: " << a_vs_b << endl; return 0; }
- 判断是否是const 还是 volatile
#include <type_traits> #include <iostream> using namespace std; ... cout << is_const<decltype(ic)>::value<<endl; //1 cout << is_volatile<decltype(iv)>::value<<endl; //1
- 判断类型
网友评论