22
|
Johannes Schaub - litb · 技术社区 · 15 年前 |
1
12
一张小纸条,虽然很少见,但我发现有些场合 相信Comeau编译器是错的-尽管,这些 很少有这样的场合,它总是值两倍和三倍的价钱 检查你的假设! 我可能有理由解释G++的行为。我不确定 在调整参数类型时精确指定: 考虑以下事项:
“bar”的定义是合法的,因为“t[10]”衰变为“t*”。我愿意 在标准中没有看到任何禁止编译器 根据模板声明执行8.3.5的调整, 在过载匹配方面,它还提高了性能。 将此应用到示例中,G++可能会将其视为:
在上面,被替换的参数是指向 函数,而不是函数数组。 所以,对我来说,问题是-如果有什么东西是Prohibs 功能参数(8.3.5)调整两次? 就个人而言,我认为允许进行调整是有道理的。 否则会使函数模板的匹配复杂化两次 超载 总之,我认为G++选择第一个重载是有效的 基于它如何处理衰减的数组参数,而comeau是错误的 不存在函数数组的演绎失败。 当然,这意味着(如果comeau是固定的),那么每个编译器 会选择一个不同的过载,仍然是标准 顺从!:( 编辑: 为了说明我的观点,请考虑以下代码:
在这里,FOO已经申报和重新申报了好几次。编译器应该应用14.8.2中列出的规则,使用哪种声明,以及哪种参数类型? 我的观点是,标准中没有提到上述内容。我还想说的是,任何有关这方面的措辞都必须将其保留为“未定义”或“实现定义”行为。 |
2
1
令人吃惊的是,这在VS2008中确实有效。我认为这不一定是正确行为的证据,尽管… Visual Studio正在解释
作为一个函数,它接受大小为t的数组,并返回对大小为1的字符数组的引用。 |
3
1
我将从阅读标准中了解模板参数推导的过程。
第一次过载的推导在步骤1中失败,因此过载分辨率返回第二次过载。我不相信这个计划是错误的。 |
TCD · 标准库非类型模板类是否显式实例化? 2 年前 |
sovesti · 参数较少的模板函数中的演绎 2 年前 |
KiraHoneybee · 具有构造函数参数的模板化类 2 年前 |
Seymore Glass · 模板不工作的默认参数 2 年前 |
Alexander Daum · 模板参数中对模板类型的引用 6 年前 |
ledonter · 为什么注入的类名有时不被视为类模板中的模板名? 6 年前 |