对于我的项目,我通常为unsigned int,char和double以及std :: string等类型定义了很多别名.
我也别名和和/,或||,而不是!等.
Ign*_*ams 22
定义类型以在代码中添加上下文是可以接受的,甚至是鼓励的.与操作员一起拧紧只会鼓励下一个必须维护密码的人带枪到你家.
Vla*_*lad 11
好吧,考虑习惯于C++的新手.他们在维护您的项目时会遇到困难.
请注意,更有效的别名有很多可能性.一个很好的例子是复杂的嵌套STL容器.
例:
typedef int ClientID;
typedef double Price;
typedef map<ClientID, map<Date, Price> > ClientPurchases;
Run Code Online (Sandbox Code Playgroud)
现在,而不是
map<int, map<Date, double> >::iterator it = clientPurchases.find(clientId);
Run Code Online (Sandbox Code Playgroud)
你可以写
ClientPurchases::iterator it = clientPurchases.find(clientId);
Run Code Online (Sandbox Code Playgroud)
这看起来更清晰可读.
Pis*_*3.0 10
如果你只是用它来无意义地重命名语言功能(而不是@Vlad给出的例子),那么它就是错误的东西.
它肯定会使代码的可读性降低 - 任何精通C++的人都会看到(x ? y : z)并知道它是一个三元条件运算符.虽然ORLY x YARLY y NOWAI z KTHX 可能是同样的事情,它会混淆观众:"这是YARLY NOWAI完全一样的东西? :,更名为作者的便利性,还是有细微的差别?" 如果这些"别名"与标准语言元素相同,那么它们只会减慢下一个人的速度来维护代码.
TLDR:阅读代码,任何代码都很难,无需一直查找私有备用语法.
那太糟了.请不要这样做.写出惯用的C++,而不是一些宏观的怪物.一般来说,定义这样的宏是非常糟糕的做法,除非在非常特殊的情况下(例如BOOST_FOREACH宏).
也就是说,and,or和not实际上已经为有效的别名&&,||并!在C++!
如果您首先包含标准标头,Visual Studio只知道它们<ciso646>.其他编译器不需要这个.
类型是别的东西.typedef如果它增强了代码的表现力,则使用根据上下文创建类型别名是有意义的.然后鼓励它.但是,更好的方法是创建自己的类型而不是别名.例如,我无法想象创建别名是否有益std::string- 为什么不直接使用std::string?(例外当然是通用数据结构和算法.)
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |