C++ 重载运算符是否有地址?
重载运算符是否有地址,我可以将它们放在向量中,例如C++ 重载运算符是否有地址?,c++,C++,重载运算符是否有地址,我可以将它们放在向量中,例如vectorv={&operator(+),&operator(-),&operator(*),&operator(/)},然后如果我写这个inta=1(*v[0])2它等于a=1+2=3?你可以使用指针在那里运行并存储lambda。以这种方式: auto plus = [](auto a, auto b) { return a + b; } auto minus = [](auto a, auto b) { return a - b; } ..
vectorv={&operator(+),&operator(-),&operator(*),&operator(/)}代码>,然后如果我写这个inta=1(*v[0])2
它等于a=1+2=3
?你可以使用指针在那里运行并存储lambda。以这种方式:
auto plus = [](auto a, auto b) { return a + b; }
auto minus = [](auto a, auto b) { return a - b; }
...
vector<decltype(plus)> v = {plus, minus, ...}
auto plus=[](自动a,自动b){返回a+b;}
自动减=[](自动a,自动b){返回a-b;}
...
向量v={正,负,…}
您可以使用指针在那里运行和存储lambda。以这种方式:
auto plus = [](auto a, auto b) { return a + b; }
auto minus = [](auto a, auto b) { return a - b; }
...
vector<decltype(plus)> v = {plus, minus, ...}
auto plus=[](自动a,自动b){返回a+b;}
自动减=[](自动a,自动b){返回a-b;}
...
向量v={正,负,…}
事实上,是的,只是不适合内置。重载运算符基本上只是函数。你能澄清一下你是指内置运算符还是重载运算符吗?重载运算符1)“例如向量v={&operator(+),&operator(-),&operator(*),&operator(/)};
”这不会编译,因为运算符+
的实际类型取决于它的定义,但它永远不会等于int
。除此之外,没有所谓的操作符(+)
(它是操作符+
)。2) “如果我写这个inta=1(*v[0])2
它等于a=1+2=3
?”这也不会编译。用法需要作为常规函数指针。也许函数运算符(例如加号、减号等)对您更有用?您可以将重载(或非重载)运算符包装在lambda中,auto v=vector{[](Foo const&rhs,Foo const&lhs){return rhs+lhs;}事实上,是的,只是不适合内置的。重载运算符基本上只是函数。你能澄清一下你是指内置运算符还是重载运算符吗?重载运算符1)“例如向量v={&operator(+),&operator(-),&operator(*),&operator(/)};
”这不会编译,因为运算符+
的实际类型取决于它的定义,但它永远不会等于int
。除此之外,没有所谓的操作符(+)
(它是操作符+
)。2) “如果我写这个inta=1(*v[0])2
它等于a=1+2=3
?”这也不会编译。用法需要作为常规函数指针。也许函数运算符(例如加号、减号等)对您更有用?您可以将重载(或非重载)运算符包装在lambda中,auto v=vector{[](Foo const&rhs,Foo const&lhs){return rhs+lhs;}代码>请不要对代码块使用反勾号`
,而是在每个代码行前面使用四个空格。向量的类型是什么?我一点也不熟悉这种新的奇特的演绎法,但是你需要在某个地方声明类型,不是吗?我更新了我的答案请不要对代码块使用反勾号`
,而是在每个代码行前面使用四个空格。向量的类型是什么?我一点也不熟悉那些新的花式演绎的东西,但是你需要在某个地方声明类型,不是吗?我更新了我的答案