Har*_*Leo -3 c++ assembly constexpr
基本问题:
编辑:v-问题-v
class foo {
public:
constexpr foo() { }
constexpr int operator()(const int& i) { return int(i); }
}
Run Code Online (Sandbox Code Playgroud)
性能是一个非常重要的问题.编译器如何实际编译以上内容?我知道我希望如何解决它,但规范如何实际指定它将被解决?
1)看到int类型有一个constexpr构造函数,创建一个int对象并编译字节串,使得从内存中的类型直接进入代码?
2)通过调用'int的构造函数来替换对重载的任何调用,由于某些未知的原因,int没有constexpr构造函数?(内联电话.)
3)创建一个函数,调用该函数,并让该函数调用'int的consctructor?
为什么我想知道,以及我打算如何使用这些知识
编辑:v-Background only-v
我正在使用的真实库使用模板参数来决定如何在函数之间传递给定类型.也就是说,通过引用或值,因为类型的确切大小是未知的.用户有责任在我给他们的限制范围内工作,但我希望这些限制尽可能轻松和用户友好,因为我可以很好地制作它们.
我希望传递一个简单的单字节字符,在这种情况下它应该通过值传递.每次调用复制构造函数时,我都不会禁止 300兆字节的庞然大物进行几次重新计算.在这种情况下,通过引用传递更有意义.我只有一个类型必须遵守的要求列表,而不是对类型可以或不可以做什么设置上限.
为什么我想知道我的问题的答案是这样我才能真诚地创建一个接受这个未知模板的函数对象,然后决定如何,何时,甚至应该复制多少对象.通过虚拟成员函数和分配有new的指针是如此需要的.如果编译器严重解决constexpr我需要知道,所以我可以抛弃这种思路和/或找到一个新思路.同样,用户有责任在我给他们的限制范围内工作,但我希望这些限制尽可能轻松和用户友好,因为我可以很好地制作它们.
编辑:谢谢你的回答.唯一真正的问题是第二句话.现在已经回答了.其他所有如果需要更多背景,请允许我重申以上内容:
我有一个带有四个参数的模板.模板的目标是路由协议.是TCP/IP -unlikely-或节点内的节点 - 可能.前两个用于数据存储.除了每个运营商列表之外,他们没有要求.最后两个定义了数据在模板中的传递方式.默认情况下,这是参考.为了性能和使用自由,可以根据用户的请求更改这些定义以按值传递信息.
每个都期望长一个字节.对于EIGRP或类似OSFP协议的度量,它们可以是第二个模板参数可以是十几个或更多个不同变量的复合.每个人都需要非繁琐的时间来复制或重新计算.
为了便于使用,我研究了使用一个接受第三和第四个模板的函数对象来处理无法正常运行或复制的特殊情况和多态类.该目标不强制用户从头开始重建他们的对象.这将需要规划虚拟功能以执行深拷贝或任何数量的其他未知奇数.函数对象的用处取决于编译器如何依赖于不生成级联的函数调用.
我希望更有帮助吗?
C++ 11标准没有说明如何将constexpr编译成机器指令.标准只是说constexpr的表达式可以用在需要编译时常量值的上下文中.任何特定编译器如何选择将其转换为可执行代码是一个实现问题.
现在一般情况下,在启用优化的情况下,您可以期望合理的编译器在运行时不会为constexpr的许多用途执行任何代码,但实际上并没有任何保证.我不清楚你在你的例子中究竟在询问什么,所以很难给出关于你的用例的任何细节.