C模板歧义

C模板歧义,第1张

概述我和朋友正在讨论C模板.他问我应该做什么: #include <iostream>template <bool>struct A { A(bool) { std::cout << "bool\n"; } A(void*) { std::cout << "void*\n"; }};int main() { A<true> *d = 0; const int 我和朋友正在讨论C模板.他问我应该做什么:
#include <iostream>template <bool>struct A {    A(bool) { std::cout << "bool\n"; }    A(voID*) { std::cout << "voID*\n"; }};int main() {    A<true> *d = 0;    const int b = 2;    const int c = 1;    new A< b > (c) > (d);}
@H_502_4@main中的最后一行有两个合理的解析. ‘b’是模板参数还是b> (c)模板参数?

@H_502_4@虽然编译这个很简单,看看我们得到了什么,但我们想知道是什么解决了歧义

解决方法 AFAIK将被编译为新的A< b>(c)> d.这是解析它的唯一合理方法恕我直言.如果解析器在正常情况下不能假设>结束模板参数,这会导致更加模糊.如果你想要另一种方式,你应该写:
new A<(b > c)>(d);
总结

以上是内存溢出为你收集整理的C模板歧义全部内容,希望文章能够帮你解决C模板歧义所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1234581.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存