提问人:Kevin eyeson 提问时间:1/6/2023 更新时间:1/6/2023 访问量:93
如果引用类型不匹配,为什么 std::is_constructible 会返回 false?
why std::is_constructible will return false if reference type is not match?
问:
我目前正在研究一些模板的东西。但是我有一个问题。 我有这样的班级
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;
}
我不明白为什么第二个会是假的。这是否意味着我不能使用 a 来构造对象?
当函数签名显示参数是按引用传递的时,我认为可以向它传递一个值。对引用有什么误解吗?string
答:
5赞
Fantastic Mr Fox
1/6/2023
#1
您可以尝试一下:
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"});
string
在此上下文中,可以引用右值,但右值不能由普通左值引用引用。A 必须是可变的,因此 和 之间存在差异(非常大的差异)。string&
string
string&
上一个:顶部,然后是弹出用法
下一个:未解析的引用 [KOTLIN]
评论
const