隐式转换哒咩
题目描述
补全 MyClass
的定义,使得 MyClass
类型的对象可以从 int
类型构造,但不能从 int
类型隐式转换。
关于输入
无
关于输出
见样例输出
核心技巧
- 用
explicit
修饰的构造函数不能用于隐式类型转换。
参考答案
#include <iostream>
#include <utility>
class MyClass {
public:
int value;
MyClass() = default;
explicit MyClass(int value) : value{value} {}
};
// 这是一些黑魔法代码,你不用管
template<typename, typename>struct J
:std::true_type{};template<typename T>
struct J<T,std::void_t<decltype(std::
declval<T&>()=0)>>:std::false_type{};
static_assert(J<MyClass,void>::value);
int main() {
MyClass a;
a = MyClass(42);
// a = 42; // 报错
std::cout << a.value << std::endl;
}