模板或成员函数选择

SNJ

我一直试图了解C ++选择模板或成员函数的方式。考虑以下代码示例:

#include <iostream>
#include <string>

struct Test
{
    template<typename X>
    explicit Test( X&& s){ std::cout << "1" << std::endl;}
    
    explicit Test( const std::string& s) { std::cout << "2"<< std::endl; }
    explicit Test( std::string&& s) { std::cout << "3"<<  std::endl; }

};

int main ()
{
    std::string line = "TEST";
    Test test( line );
}

我在控制台上打印了“ 1”。如果它是与参数类型匹配的非模板,为什么不选择“ 2”?

songyuanyao

构造函数模板的参数声明为转发参考。当传递左值时,例如line,模板参数X推导为std::string&,在引用折叠后,参数类型为std::string&,即对non-const的左值引用std::string这是完全匹配,并在重载分辨率方面胜出。

另一方面,构造函数采用const std::string&要求对参数进行const限定,并且构造函数采用std::string&&不能与左值一起使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++模板化函数可以选择成员变量吗?

来自分类Dev

C++在构造函数中选择类成员的模板类型

来自分类Dev

模板成员函数继承

来自分类Dev

模板类的成员函数

来自分类Dev

调用模板成员函数

来自分类Dev

const成员函数中模板成员的常数

来自分类Dev

模板类成员函数的参数

来自分类Dev

模板类的成员函数指针

来自分类Dev

从成员函数返回模板类

来自分类Dev

std :: bind与模板成员函数

来自分类Dev

成员函数的模板和指针

来自分类Dev

成员模板函数指针错误

来自分类Dev

类模板成员函数的特化

来自分类Dev

C ++-14使用enable_if_t选择以整数类型为模板的类的成员函数

来自分类Dev

模板类成员与非成员模板函数的歧义

来自分类Dev

将成员函数传递给模板函数

来自分类Dev

成员函数的正确函数签名模板

来自分类Dev

C ++成员函数重载选择错误的函数

来自分类Dev

指向类模板成员的函数指针

来自分类Dev

模板类成员函数实例化

来自分类Dev

如何专门化模板成员函数?

来自分类Dev

获取类模板成员的函数类型?

来自分类Dev

强制模板成员函数实例化

来自分类Dev

ref合格的成员函数作为模板参数?

来自分类Dev

C ++:转发模板成员函数调用失败

来自分类Dev

模板成员函数专门化

来自分类Dev

模板类-成员函数专门化

来自分类Dev

使用模板类复制成员函数

来自分类Dev

模板成员函数的编译器错误