我现在在学一些模板的东西。但是我有一个问题。我有一个这样的课
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;
}
我不明白为什么第二个会是false。这是不是意味着我不能使用string
来构造对象?当函数签名显示参数是通过引用传递时,我认为向它传递一个值是可以的。是否对引用有误解?
1条答案
按热度按时间yiytaume1#
你可以试试看:
这是一个字符串,所以它应该编译吗?
Live example
string
在这个上下文中可以引用右值,但是右值不能被正常的左值引用引用引用。string&
必须是可变的,因此string
和string&
之间存在差异(非常大的差异)。