首页 > 解决方案 > 是文字,比如“Hello world”,当我将它传递给它的参数是通用引用的模板时是一个右值?

问题描述

我的代码如下:

template  <typename T>
void func(T&& param){
    using boost::typeindex::type_id_with_cvr;
    cout << "T = " << type_id_with_cvr<T>().pretty_name() << " , "
        << "param = " << type_id_with_cvr<decltype(param)>().pretty_name() << '\n';
}
int main(void){
    const char name[] = "J. P. Briggs";
    func(name);
    func("Hello World");
    func(24);
    return 0;
}

结果:

T = char const (&) [13] , param = char const (&) [13]
T = char const (&) [13] , param = char const (&) [13]
T = int , param = int&&

文字“Hello World”不是右值吗?如果是这样,为什么语句的结果func("Hello World");T = char const (&) [13] , param = char const (&) [13]而不是T = char const[13] , param = char const(&&) [13]??
有什么不对 ?

标签: c++templatesrvaluetype-deductionforwarding-reference

解决方案


推荐阅读