【发布时间】:2021-08-21 08:13:15
【问题描述】:
我试图复制字符串类函数,我们可以在同一行中声明和分配字符串类对象值某个右值。
例如字符串 s1 = "Hello"
但我试图用整数来做。我的代码是这样的。
#include <iostream>
using namespace std;
class Foo {
private:
int a;
public:
Foo () {
}
explicit Foo(int a) {
this->a = a;
}
Foo(Foo &obj) {
this->a = obj.a;
}
void operator= (int a) {
cout<<"operator called "<<endl;
this->a=a;
}
void print() {
cout<<"a is "<<this->a<<endl;
}
};
int main () {
Foo obj2 = 10; // Getting error here (no int to Foo conversion found)
obj2.print();
return 0;
}
我知道从我的单参数构造函数中删除显式(即使其成为转换构造函数)可以解决问题,但我想保持 ctor 为显式。有什么办法可以做到这一点?我也尝试重载“=”赋值运算符,但没有运气。请帮忙。
【问题讨论】:
-
"但是我想保持 ctor 的明确性" 为什么?
-
“在同一行中声明并分配一个 [object] 一些右值”——这里使用的正确术语是“初始化”,因为没有使用赋值运算符。
-
Foo obj2 = 10;调用构造函数,而不是operator=。使其工作的唯一方法是提供有效的构造函数(删除显式)。 -
@Jodocus 没有具体原因。只是出于好奇-如果不使 ctor 隐含,就不可能做到这一点吗? ctor 是否也隐含在原始字符串类中?
-
string s1 = "Hello";这里没有右值。"Hello"是一个字符串字面量,被传递给std::string s1的构造函数,没有创建右值。
标签: c++ string constructor rvalue parameterized-constructor