前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 现代编程风格速查表

C++ 现代编程风格速查表

作者头像
ApacheCN_飞龙
发布2019-02-15 10:33:05
8530
发布2019-02-15 10:33:05
举报
文章被收录于专栏:信数据得永生信数据得永生

栈上数组

代码语言:javascript
复制
// naive:
int arr[10];
memset(arr, 0, sizeof(a));
代码语言:javascript
复制
// modern:
// #include <array>
std::array<int, 10> arr;
arr.fill(0);

堆上数组

代码语言:javascript
复制
// naive:
int *arr = new int[10];
memset(arr, 0, 10 * sizeof(int));
代码语言:javascript
复制
// modern:
// #include <vector>
std::vector<int> arr(10);

字符串

代码语言:javascript
复制
// naive:
char str[] = "Hello, C++!";
代码语言:javascript
复制
// modern:
// #include <string>
std::string str = "Hello, C++!";
// or auto str = "Hello, C++!"s;

指向栈的指针

代码语言:javascript
复制
// naive:
int ival;
int *p = &ival;
代码语言:javascript
复制
// modern:
int ival;
int &rval = ival;

堆上对象

代码语言:javascript
复制
// naive:
MyClass *obj = new MyClass;
obj->someMethod(args);
代码语言:javascript
复制
// modern:
auto obj = std::make_unique<MyClass>();
// or auto obj = std::make_shared<MyClass>();
obj->someMethod(args);

函数指针

代码语言:javascript
复制
// naive:
typedef int (*func_t)(int, int);
func_t func = some_func;
代码语言:javascript
复制
// modern:
// #include <function>
std::function<int(int, int)> func = some_func;

函数对象

代码语言:javascript
复制
// naive:
struct func_t
{
    int operator() (int arg1, int arg2)
    {
        // statements
    }
};

func_t func;
代码语言:javascript
复制
// modern:
// #include <function>
std::function<int(int, int)> func
    = [](int arg1, int arg2)
    {
        // statements
    };

宏定义常量

代码语言:javascript
复制
// naive:
#define PI 3.14
代码语言:javascript
复制
// modern:
const double PI = 3.14;

宏定义类型

代码语言:javascript
复制
// naive:
#define uint unsigned int
代码语言:javascript
复制
// modern:
typedef unsigned int uint;
// or using uint = unsigned int;

宏定义函数

代码语言:javascript
复制
// naive:
#define max(a, b) ((a)>(b)?(a):(b))
代码语言:javascript
复制
// modern:
template<T>
inline T max(T a, T b)
{
    return a>b? a: b;
}

原生类型转换

代码语言:javascript
复制
// naive:
int ival;
double dval = (double)ival;

char *pc1 = ...;
const char *cpc = (char *)pc1;
char *pc2 = (const char *)cpc;

Derived *pd1 = ...;
Base *pb = (Base *)pd1;
Derived *pd2 = (Derived *)pb;

void *pv1 = ...;
long lval = (long)pv1;
void *pv2 = (void *)lval;
代码语言:javascript
复制
// modern:
int ival;
double dval = static_cast<double>(ival);

char *pc1 = ...;
const char *cpc = const_cast<const char *>(pc1);
char *pc2 = const_cast<char *>(cpc);

Derived *pd1 = ...;
Base *pb = dynamic_cast<Base *>(pd1);
Derived *pd2 = dynamic_cast<Derived *>(pb);

void *pv1 = ...;
long lval = reinpreter_cast<long>(pv1);
void *pv2 = reinpreter_cast<void *>(lval);

线程

代码语言:javascript
复制
// naive:
// #include <pthread.h>
pthread_t tid;
pthread_create(&tid, func, arg);
代码语言:javascript
复制
// modern:
// #include <thread>
std::thread thr(func, arg);

未完待续…

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年01月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 栈上数组
  • 堆上数组
  • 字符串
  • 指向栈的指针
  • 堆上对象
  • 函数指针
  • 函数对象
  • 宏定义常量
  • 宏定义类型
  • 宏定义函数
  • 原生类型转换
  • 线程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档