![]() |
1
2
我认为这里的基本问题是,在生成函数的独立版本时,编译器必须生成可以由任何地方的任何人根据各自的调用约定调用的代码。当在不知道函数定义的情况下生成对函数的调用时,编译器真正知道的是,该函数期望根据调用约定进行调用。基于此,似乎除非调用约定指定删除空类型的函数参数,否则编译器通常无法从函数调用中真正优化参数。现在,C++编译器在技术上是合法的,它可以弥补它所认为的任何给定函数签名的调用约定,除非函数具有非C++语言链接(例如,
一种可能的解决方案是,例如,对实际的函数实现使用不同的名称,并使用简单的内联包装函数,将带有标记类型的调用转换为相应的实现:
此外,请注意,虽然编译器可能会像在初始对象文件中那样生成函数调用,但链接时间优化最终可能会消除未使用的参数。至少有一个主要的编译器 documents 这样的行为… |
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |