gpt4 book ai didi

c++ - 如果引用类型不匹配,为什么 std::is_constructible 将返回 false?

转载 作者:行者123 更新时间:2023-12-02 01:24:48 24 4
gpt4 key购买 nike

我目前正在研究一些模板的东西。但我有一个问题。我有一堂这样的课

class myobj{
public:
int val;
char single;
string name;
myobj(){}
myobj(int a):val(a){};
myobj(int a, char b, string& c): val(a), single(b), name(move(c)){};

};

这是main函数

int main(){
cout << is_constructible<myobj, int>::value << endl; //true
cout << is_constructible<myobj, int, char, string>::value << endl; //false
cout << is_constructible<myobj, int, char, string&>::value << endl; //true
return 0;
}

我不明白为什么第二个会是假的。这是否意味着我不能使用 string 来构造对象?当函数签名显示参数是按引用传递时,我认为向其传递值是可以的。引用是否有任何误解?

最佳答案

你可以尝试一下:

myobj(1, 'c', std::string{"lalala"});

这是一个字符串,是的,所以它应该编译?否:

error: cannot bind non-const lvalue reference of type 'std::string&' {aka 'std::__cxx11::basic_string<char>&'} to an rvalue of type 'std::string' {aka 'std::__cxx11::basic_string<char>'}
20 | myobj(1, 'c', std::string{"lalala"});

Live example

此上下文中的

string 可以引用右值,但正常的左值引用不能引用右值。 string& 必须是可变的,因此 stringstring& 之间存在差异(非常强的差异)。

关于c++ - 如果引用类型不匹配,为什么 std::is_constructible 将返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75025486/

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