我有一个包含许多矢量,集合和地图的项目.在大多数情况下,键/索引是整数.我正在考虑创建小类,如:
class PhoneRepoIx //index into map {phone_number => pointer}
{
public:
int n;
};
class PersonIx //index into map {social_security_number => pointer}
{
public:
int n;
};
Run Code Online (Sandbox Code Playgroud)
我会受到任何速度或记忆惩罚吗?有了内存,我90%确定每个实例没有内存成本,只有每个类型.速度我不清楚.
动机: 通过上述方法,编译器会为我做一些额外的类型检查.此外,通过精心选择的显式类型名称,我的代码的读者将更容易看到我在做什么.到目前为止,我到处使用int,我选择了变量名来表达每个索引.有了上面的内容,我的变量名称可能更短.
注意:Tyepdefs没有完全解决我的问题,因为编译器不会进行任何额外的类型检查,内部所有类型都只是int.
不同的编译器具有不同的优化能力和不同的错误.理论上可以用精确零开销来编译它.你的编译器会达到理论上的限制吗?答案是明确的"可能".至少有些编译器至少在某些时候会这样做.
更有趣的问题是你是否应该担心可能的性能下降.这个问题的答案是强烈的"不".直到你的程序确实显示出不可接受的性能数据.