临时对象创建
Posted
技术标签:
【中文标题】临时对象创建【英文标题】:Temporary object creation 【发布时间】:2012-10-22 20:29:39 【问题描述】:有谁知道是否可以在任何 C++ 上启用任何类型的日志记录 兼容的编译器(Visual Studios、g++ 等),以便我可以发现临时对象的创建时间?
例如:
假设我有一个函数f(char x)
,但我用f(46)
调用它
我会在日志中看到 -
temporary char created promoting int @ function param f(46)
(或类似的东西)
我已通读 VS 编译器开关选项,看来这不是 一个选项。
我了解,在新标准中有 rvalue reference
(&&) 的概念,可用于检测大多数临时移动语义,但这涉及添加新代码/兼容编译器。
那么这可以做到吗?或者这是编译器的特权知识?
【问题讨论】:
即使是很短的代码也可以生成大量的副本和临时文件。这将没有你想象的那么有用。46
是一个完全有效的char
值,将其按值传递给函数是正确的做法。你确定你没有读过一些 C 核心程序员写的 FUD 文章吗?
抱歉回复太晚了——我知道它会产生大量数据,但它会很有用。无论如何,我在这个阶段认为它无法完成,所以我可能会考虑自己做。无论如何感谢您的帮助。
@Bo,是的,那错了,我应该输入 f(const char& x)
【参考方案1】:
IDE 中的内联注释更有用(因为我假设您想通过最小化其中一些临时值来进行优化?)。实际上,最简单的方法是修改 GCC 或 g++ 并让它们与 Visual Studio 插件或其他东西对话。他们可以用寄存器分配和所有东西来注释。哇,那真的很有帮助。
除非有这样的努力,而且我不知道,最好的方法就是学习阅读程序集。在 Visual Studio 中,您可以让编译后的程序集与源代码内联显示,这非常有用。
【讨论】:
以上是关于临时对象创建的主要内容,如果未能解决你的问题,请参考以下文章