#include <iostream>
using namespace std;
class Test
{
private:
mutable int val{};
public:
static constexpr int MAX{ 5 };
public:
Test() = default;
Test(int i) : val{ i } {}
~Test() { cout << "~Test()" << endl; }
explicit operator int() const { return val; } // int()변환 연산자 오버로딩 (반환형식을 기재하지 않는다.)
void print() const
{
++val; // mutable 형식이기 때문에 수정가능
cout << val << endl;
}
};
int main()
{
Test t{ 10 };
int i = static_cast<int>(t); // int()변환 연산자가 explicit이라 명시적으로 타입캐스팅을 해주어야한다.
int j{ t }; // 근데 얘는 왜 될까..??
}
"Равномерная инициализация происходит неявно, даже если оператор int cast объявлен с явным ключевым словом. В чем причина?"