gpt4 book ai didi

c++ - 左值参数是否更喜欢左值引用参数而不是通用引用?

转载 作者:IT老高 更新时间:2023-10-28 22:13:51 35 4
gpt4 key购买 nike

在使用通用引用时,我遇到了这种情况,clang 和 gcc 在重载解析上存在分歧。

#include <iostream>

struct foo {};

template<typename T>
void bar(T&) { std::cout << "void bar(T&)\n"; }

template<typename T>
void bar(T&&) { std::cout << "void bar(T&&)\n"; }

int main()
{
foo f;
bar(f); // ambiguous on gcc, ok on clang
}

gcc reports上面的调用是模棱两可的。但是,clang选择T&重载,编译成功。

哪个编译器出错了,为什么?

编辑:
在VS2013 Preview上测试了同样的代码,和clang一致;除了 Intellisense,它在 gcc 方面 :-)

最佳答案

“通用引用”将参数推导出为foo&。第一个模板还将参数推导出为 foo&

C++ 对函数模板有一个偏序规则,这使得 T&T&& 更专业。因此,必须在您的示例代码中选择第一个模板。

关于c++ - 左值参数是否更喜欢左值引用参数而不是通用引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17979265/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com