QChar是否具备赋值运算符?为何可正常使用赋值操作却找不到其定义?
QChar是否具备赋值运算符?为何可正常使用赋值操作却找不到其定义?
嘿,这个问题其实挺典型的,很多人刚接触C++类的默认成员函数时都会懵,我来给你理清楚~
你能正常用=对QChar对象赋值,却在官方文档和源码里找不到operator=的显式定义,核心原因是C++编译器会自动为符合条件的类生成默认拷贝赋值运算符!
具体规则是这样的:如果你的类没有显式声明以下任意一个成员函数,编译器就会自动帮你生成默认的拷贝赋值运算符:
- 自定义的拷贝赋值运算符(也就是
operator=) - 自定义的移动赋值运算符
- 自定义的拷贝构造函数
- 自定义的移动构造函数
- 自定义的析构函数
对于QChar来说,它内部只是封装了一个简单的基础数值类型(比如unsigned short),完全不需要手动写赋值运算符——编译器生成的默认版本会逐个拷贝类的非静态成员,完全能满足需求。所以Qt的开发团队根本没必要显式去实现它,自然你在源码和文档里就找不到对应的定义了。
就拿你写的这段代码举例:
QChar c = QChar('c'); QChar d = c; c = d;
这里QChar d = c;调用的是编译器自动生成的默认拷贝构造函数,而c = d;调用的就是默认拷贝赋值运算符,它们都能完美工作,因为QChar的成员都是可以直接拷贝的简单类型。
说白了就是:QChar不是没有赋值运算符,而是这个运算符是C++编译器“偷偷”帮它生成的隐式成员,所以你看不到显式代码,但丝毫不影响正常使用~
备注:内容来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

