![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
weixin_42489507
这个作者很懒,什么都没留下…
展开
-
尽可能的使用constexpr
constexpr是在编译期确定的const变量,const不保证int sz; // non-constexpr 变量constexpr auto arraySize1 = sz; // error! sz的值编译期间未知const auto arraySize = sz; // fine, arraySize is const copy of szconstexpr函数,如果入参都是编...原创 2020-05-08 17:10:07 · 125 阅读 · 0 评论 -
将不会抛出异常的函数声明 为 noexcept
noexcept是会传递的,由底层函数向调用者传递,声明为noexcept题目这么做可能有一定的风险,如果后面想改成非noexcept的,但是可能调用者已经以来了noexcept,会导致调用者架构被破坏noexcept是函数接口的一部分,也就意味着,调用者对它有依赖 noexcept函数比non-except函数更可以优化 noexcept对move操作、swap、内存释放函数、析构函...原创 2020-04-27 08:58:50 · 663 阅读 · 0 评论 -
优先 使用 const_iterators 而非 iterators
下面代码中的cbegin,cend就是const iteratorauto it = // use cbeginstd::find(values.cbegin(),values.cend(), 1983); // and cendvalues.insert(it, 1998);优先使用const_iterator而不是iterator。 在最大泛型代码中,相对于它们的成员函数部分,优先...原创 2020-04-26 09:00:23 · 355 阅读 · 0 评论 -
使用 override 关键字声明 覆盖的函数
public:void doWork() &; // 只有this是左值(lvalue)时才能调用void doWork() &&; //只有this是右值(rvalue)时才能调用}; 用关键字override声明覆盖函数。 成员函数引用后置修饰符可以区别对待左值和右值对象。class Widget {public:using DataType = s...原创 2020-04-23 09:21:10 · 282 阅读 · 0 评论 -
优先 使用 delete 关键字删除函数,而非 private 却 又 不 实现的 方式
float总是优先转换为double,而不是int优先使用删除函数,而不是私有且未定义的函数。任何函数都可以标记为删除,包括非成员函数和模板实例化。原创 2020-04-23 09:07:30 · 316 阅读 · 0 评论 -
scoped enum和unscoped enum
scoped enum是在enum关键字后面加上一个class,内容的默认类型是int,enum class Color { black, white, red };如果不想使用int,也可以像这样显示指定,enum class Status: std::uint32_t; C++98风格的枚举,现在称作为unscoped enum。 scoped enum的枚举元素只在enum内可见...原创 2020-04-22 08:58:15 · 657 阅读 · 0 评论 -
优先 使用 别名声明 而非 typedefs
typedef不支持模板化,别名声明支持。 别名模板省去了“::type”后缀,而且,在模板里,typedef一般要加“typename”前缀 C++14提供了C++所有类型特征转换的别名模板...原创 2020-04-20 20:30:52 · 80 阅读 · 0 评论 -
优先使用nullptr,而不是0或者NULL
在 C++98 中,这意味着,重载指针和整数类型的函数,得到的结果会令人吃惊。传递0或者NULL给重载函数,永远不会调用指针重载的那个函数:void f(int); // three overloads of fvoid f(bool);void f(void*);f(0); // 调用f(int), 而不是f(void*)f(NULL); // 有可能编译不过, 但调用f(int). ...原创 2020-04-20 09:27:44 · 139 阅读 · 0 评论 -
创建对象时区分()和{}
C++11增加了{}的统一初始化基本语法是int z{ 0 };有一些场景会与预想的不一样,在重载了多个实现的情况下,即使存在类型完全一致的函数,仍会优先匹配std::initializer_list为参数的函数,并发生类型转换class Widget {public:https://blog.csdn.net/gw85047034Widget(int i, bool b); // a...原创 2020-04-20 09:16:28 · 141 阅读 · 0 评论 -
decltype类型
decltype和参数的类型是一模一样的可以用来函数返回类型在形参之后声明,可以利用入参的类型决定返回值的类型,例如template<typename Container, typename Index> // 正确但需要优化auto authAndAccess(Container& c, Index i)-> decltype(c[i]){authentic...原创 2020-03-24 15:25:29 · 205 阅读 · 0 评论 -
auto类型推导
情形 1 类型指示符是 一个 指针或引用,但不是一个通用引用。情形 2 类型指示符是一个通用引用,auto&&,会保持右值的const属性。auto&& uref1 = x; // x is int and lvalue,// so uref1’s type is int&auto&& uref2 = cx; // cx is con...原创 2020-03-24 14:50:56 · 232 阅读 · 0 评论 -
C++模板函数类型推导
template<typename T>void f(T aaa)在f(bbb)调用时,会把bbb赋值一份传给aaa,会丧失bbb本身的属性,包括const和引用const char * const bbb = “bbb”;在f(bbb)传递时,bbb会丧失第二个const属性,就是说进入f之后,aaa是bbb的一个副本,aaa不是const,但是aaa的类型还是const c...原创 2020-03-12 20:24:35 · 257 阅读 · 0 评论