在类中包装int会有什么性能损失吗?

Rad*_*nej 14 c++

我有一个包含许多矢量,集合和地图的项目.在大多数情况下,键/索引是整数.我正在考虑创建小类,如:

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.

n. *_* m. 6

不同的编译器具有不同的优化能力和不同的错误.理论上可以用精确零开销来编译它.你的编译器会达到理论上的限制吗?答案是明确的"可能".至少有些编译器至少在某些时候会这样做.

更有趣的问题是你是否应该担心可能的性能下降.这个问题的答案是强烈的"不".直到你的程序确实显示出不可接受的性能数据.

  • 这个答案大大低估了现代编译器的能力.我希望*一个不错的编译器将这个代码编译为零开销.事实上,有几个库(其中包括C++标准库的一部分)**需​​要*编译器来执行此操作,以免它们遭受大规模的性能打击.一般来说,答案不是"可能",它既可以是"是",也可以是"更改编译器". (8认同)
  • @KonradRudolph:我曾多次比较g ++为裸体和包裹类型生成的汇编.大部分时间都没有开销,但并非总是如此.在这方面,clang ++比g ++差一些. (2认同)