Modern C++有哪些能真正提升开发效率的语法糖?

真正"不敢当,只能说自己用的愉快(ps:也不全是cpp17/14的特性)

1. if/switch 初始化语句

//before
auto*tmp = parseExpression();
if(tmp!=nullptr){
    work();
}
//after   
 if (auto* tmp = parseExpression(); tmp != nullptr) {
    work();
}

2. 结构化绑定

std::tuple<int,string> nextToken(){
    return {4,"fallthrough"};
}

//before
int main() {
    auto token = nextToken();
    std::cout<<std::get<int>(token)<<","<<std::get<std::string>(token);
    return 0;
}
//after
int main() {
    auto[tokenType,lexeme] = nextToken();
    std::cout<<tokenType<<","<<lexeme;
    return 0;
}

3. std::string_view

//before
void isKeyword(const std::string & lit){
    work();
}
//after
void isKeyword(std::string_view lit){
    work();
}

4. 内联变量

// A.h
inline int k = 10; //不需要为一个简单的变量分一个.cpp写定义了

5. 折叠表达式和泛型lambda

//before
if(x=='x'||x=='X'||x=='e'||x=='E'||x=='.'){
    work();
}

//after
static auto anyone = [](auto&& k, auto&&... args) ->bool { return ((args == k) || ...); };
if(anyone(x,'x','X','e','E','.')){
    work();
}

6. 继承构造函数

struct Base{
    Base(int a,char b,double c, std::string d,float f)
    :a(a),b(b),c(c),d(std::move(d)),f(f){}

    int a;
    char b;
    double c;
    std::string d;
    float f;
};

//before
struct Derive : public Base{
    Derive(int a,char b,double c, std::string d,float f):Base(a,b,c,d,f){}
};

//after
struct Derive : public Base{
    using Base::Base;
};

7. +lambda转换

对lambda使用一元+表达式可以将它转换为普通函数指针

// before 
int8_t (*CreateLonglink)(const std::string& name, const std::string& host,
 const std::vector<uint16_t> ports, const std::string& debugip)
 = +[](const std::string& name,
                         const std::string& host,
                         const std::vector<uint16_t> ports,
                         const std::string& debugip)->int8_t{
   
    ...
    return 0;
};
// after
auto CreateLonglink= +[](const std::string& name,
                         const std::string& host,
                         const std::vector<uint16_t> ports,
                         const std::string& debugip)->int8_t{
   
    ...
    return 0;
};

使用频率降序,不过已经偏离语法糖范畴了~ 还有些少见的特性可以参见:

esoteric-features-in-modern-cpp​github.com/kelthuzadx/esoteric-features-in-modern-cpp

另外还有一本讲C++17特性的书强烈推荐,中文翻译见这里:

kelthuzadx/Cpp17TheCompleteGuideChinese​github.com/kelthuzadx/Cpp17TheCompleteGuideChinese​编辑

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值