C++创建新的运算符并使当前运算符重载
C++ creating new operators and overloading the current ones
我正在编写用于转置矩阵的代码,作为学习C++的一部分。我正在做的是运算符重载。但是,通常转置矩阵的表示法是 '
.
'
甚至是操作员吗?我了解它是否介于您注释字符' '
之间,如果您使用" "
则表示字符串。但是这些运营商是否?我可以将它们作为单个字符甚至整个字符超载吗?
我可以在C++中创建新运算符,这些运算符仅适用于特定类的对象吗?我使用的技巧是重载已知的运算符,如+
、-
、^
、...然后#define
我更改了预处理器处理文本的方式,但最终我仍然会覆盖现有的运算符,并且我不能使用任何特殊符号,而是使用字母。
重载仅限于现有的C++运算符集。这是运算符重载,而不是创建。您不能像@
那样创建新的运算符,也不能将像'
这样的非运算符字符转换为运算符。
我可以在C++中创建新运算符,这些运算符仅适用于特定类的对象吗?
不能创建新的运算符。您只能重新利用现有的。
。然后
#define
我更改预处理器处理文本的方式......
你可能不应该这样做。远离预处理器。这是最后的手段。
不能创建不作为C++标准的一部分存在的运算符。它们不会成为语法的一部分,并会导致语法错误。
因此,运算符的可能性与语言语法和语法授权的内容相关联(有关列表的链接,请参阅@afenster答案(。
附带说明一下,这个运算符问题在其他语言(如 Python(中也是如此,委员会需要决定添加新运算符(如矩阵乘法的 @
(是否对该语言有意义。 许多运算符都派生自数学表达式,因此添加没有这种数学背景的新运算符是没有意义的(例外情况*
, 例如()
(
您可以重载的运算符列表在这里。不幸的是(或幸运的是(,您不能使用任何其他字符作为运算符。最基本的原因是运算符重载不会也不得更改代码语法解析的逻辑(例如什么是运算符,什么不是运算符,运算符优先级是什么等(。
您只能重载现有运算符。
你可以假装一下。
namespace my_operator {
struct transpose_t {};
constexpr tranpose_t transpose{};
template<class Matrix>
Matrix operator^( Matrix lhs, tranpose_t ) {
lhs.Transpose();
return lhs;
}
}
鉴于此,以及具有自转置.Transpose()
方法的矩阵类型,我们得到:
using my_operator::transpose;
MATRIX m = {/* whatever */};
MATRIX tm = m^transpose;
tm
将是m
的转置.
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- C++20概念:需要运算符重载
- 使用赋值运算符重载从类中返回jobject
- 在运算符重载定义中使用成员函数(const错误)
- 字节到位运算符重载C++
- 为什么在运算符重载时需要参考?
- 类中 c++ 的运算符 + 重载
- 算术复合运算符重载为非成员
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 交换运算符 + 重载会导致无限递归
- 如何理解新的运算符重载?
- 向量保持复数的运算符重载
- 如何创建运算符重载?
- 链接列表运算符重载没有打印出我想要的内容
- C++:需要帮助了解运算符重载错误
- 使用模板化运算符重载 XOR 运算符失败
- 如何确保接受的C++模板类型使运算符重载?
- 运算符重载使用运算符+添加类模板