c++ - 在同一行中声明和分配对象一些右值
问题描述
我正在尝试复制字符串类函数,我们可以在同一行中声明和分配字符串类对象值某个右值。
例如字符串 s1 = "你好"
但我试图用整数来做。我的代码是这样的。
#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 为显式。有什么办法可以做到这一点?我也尝试重载“=”赋值运算符,但没有运气。请帮忙。
解决方案
explicit
根据 Bjarne 的说法,声明构造函数的主要目的是使隐式转换非法,例如
void Bar(Foo a);
Foo obj2 = 10; // illegal, conversion int to Foo
Bar(10); // illegal too
相反,那些应该被显式转换:
Foo obj2 = Foo(10);
Bar(Foo(10));
推荐阅读
- javascript - 领域与电子兼容 - 反应?- 集成时出错
- c - 为什么我不能运行矩阵大小 1000*1000
- sql - 获取具有最新 2 个输入的用户列表 -(TypeORM ,sql)
- javascript - 如何在 p5.js 中识别弧内的光标?
- javascript - 文本字段在 React 中不可编辑
- python - 如何使用 selenium python 打开一个新标签?
- python - 为合并的字典键提供综合分数
- java - IllegalStateException:设备上的文件系统处于错误状态。WorkManager 无法访问应用程序的内部数据存储
- c++ - 在这种情况下我真的需要使用另一个模板吗
- php - 如何为与我的项目链接的照片链接附加磁盘