提升开发效率的一些语法糖:
1.if/switch
初化语句
//以前
auto*tmp = parseExpression();
if(tmp!=nullptr){work();
}
//之后if (auto* tmp = parseExpression(); tmp != nullptr) {work();
}
2
.结构化绑定
std::tuple<int,string> nextToken(){return {4,"直降"};
}
//以前
int main() {auto token = nextToken();std::cout<<std::get<int>(token)<<","<<std::get<std::string>(token);return 0;
}
//之后
int main() {auto[tokenType,lexeme] = nextToken();std::cout<<tokenType<<","<<lexeme;return 0;
}
3.std::string_view
//以前
void isKeyword(const std::string & lit){work();
}
//之后
void isKeyword(std::string_view lit){work();
}
4
.内联变量
//A.h inline int k = 10; //不需要为简单变量分一个.cpp写定义了
5
.折叠式和模板λ
//以前
if(x=='x'||x=='X'||x=='e'||x=='E'||x=='.'){work();
}
//之后
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;
};
//以前
struct Derive : public Base{Derive(int a,char b,double c, std::string d,float f):Base(a,b,c,d,f){}
};
//之后
struct Derive : public Base{using Base::Base;
};
7.+λ
转换
对λ
使用一元+式
可按普通函数指针
转换它
//以前
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;
};
//之后
auto CreateLonglink= +[](const std::string& name, const std::string& host, const std::vector<uint16_t> ports, const std::string& debugip)->int8_t{...return 0;
};