我有一个冒泡排序函数,它接受一个数组,一个比较函数和一个布尔值,指示它是否应该对数组进行倒置排序.它是一个支持任何数据类型的模板函数,并将自动推导出数组大小.
指定比较函数时,如果我传递函数指针,编译器会自动推导出数组的数据类型,这很好.但是,如果我改为传递lambda,它将不会自动推断.我必须明确指定数据类型,或static_cast将lambda指定为fnCompare_t<double>.
这背后的原因是什么?因为根据这篇文章,只要lambda不捕获,它就可以像普通的函数指针一样使用,但似乎并非总是如此?在这种情况下怎么会有所不同?
#include <iostream>
using namespace std;
template <typename T>
using fnCompare_t = int(*)(T const &, T const &);
template <typename T, size_t count>
inline void BubbleSort(
T(&array)[count],
fnCompare_t<T> fnCompare,
bool reverse)
{
cout << "TODO: Implement BubbleSort" << endl;
}
double doubleArray[] = {
22.3, 11.2, 33.21, 44.2, 91.2, 15.2, 77.1, 8.2
};
int CompareDouble(double const & a, double const & b)
{
return a > b ? 1 : a == …Run Code Online (Sandbox Code Playgroud) 在研究C++运算符重载时,我偶然发现了一个页面:
新的运算符,例如**,<>或&| 无法创建.
请问&|在C++中真的存在吗?如果是这样,它叫什么,它做了什么?
---更新---
对于将来想知道答案的人:句子意味着你不能创建"新"运算符,而不是newC++中的新运算符和运算符.它的意思是
语言中不存在的运算符,例如**,<>和&|,无法创建