C++11/14/17标准库测试代码( 四 )

<< std::to_string(1000) << ", " << std::to_string(3.1352345) << std::endl;}{typedef void(*FunctionType)(double);// 老式语法using FunctionType = void(*)(double);// 新式语法}{// nullptr and NULLint a = NULL;// int a = nullptr; // 编译错误void *p = nullptr;class MyNullPtr{public:void func(int a){printf("func(int) is called.n");}void func(const char* a){printf("func(const char*) is called.n");}};MyNullPtr ptr;ptr.func(0);ptr.func(NULL);ptr.func(nullptr);}{// constexpr,常量表达式int len = 10;// char buffer[len]; // 编译报错const int b = 10 + 5*2;const int a = 10 + 5*2 + b;constexpr int len2 = 10 + 50*2 + a;char buffer2[a]; // 合法}{// 左值引用和右值引用(&&)std::string str1 = "string,"; // lv1 是一个左值// std::string&& str2 = str1;// 非法, 右值引用不能引用左值std::string&& str3 = std::move(str1); // 合法, std::move可以将左值转移为右值std::string&& str4 = str1 + str3; // 合法, 右值引用延长临时对象生命周期str4 += "Test"; // 合法, 非常量引用能够修改临时变量}{int i = 0;std::string str1 = "string,"; // lv1 是一个左值const std::type_info& info1 = typeid(i);printf("typeinfo:%s, %sn", info1.name(), info1.raw_name());const std::type_info& info2 = typeid(&str1);printf("typeinfo:%s, %sn", info2.name(), info2.raw_name());}}int main(int argc, char *argv[]){setlocale(LC_ALL, "zh_CN.UTF-8");// auto类型推导cpp11_auto();// 区间迭代cpp11_loops();// 强类型枚举cpp11_enum();// Lambda表达式cpp11_lambda();// 互斥量和原子变量cpp11_mutex_atomic();// 条件变量cpp11_condition();// thread,线程cpp11_thread();// 异步任务处理cpp11_future();// 正则表达式cpp11_regex();// 字符串相关cpp11_wstring_utf8();// 函数调用cpp11_functional();// 移动构造cpp11_move();// 共享指针cpp11_shared_ptr();// class新的特性cpp11_class();// string_view(C++17)cpp17_string_view();// 其他一些实用方法cpp11_others();return 0;}



推荐阅读