营销网站方案设计,免费的app制作软件,什么是网络营销的特点,wordpress 改模板任何定义了函数调用操作符的对象都是函数对象。C 支持创建、操作新的函数对象#xff0c;同时也提供了许多内置的函数对象。 运算符函数对象
C 针对常用的算术和逻辑运算定义了很多函数对象#xff1a; 位运算
实现 x y 的函数对象
std::bit_and template class…任何定义了函数调用操作符的对象都是函数对象。C 支持创建、操作新的函数对象同时也提供了许多内置的函数对象。 运算符函数对象
C 针对常用的算术和逻辑运算定义了很多函数对象 位运算
实现 x y 的函数对象
std::bit_and template class T struct bit_and; (C14 前) template class T void struct bit_and; (C14 起)
进行逐位与的函数对象。等效地调用类型 T 上的 operator 。
特化 标准库提供 std::bit_and 在不指定 T 时的特化它使得参数类型和返回类型留待推导。 bit_andvoid 实现 x y 并推导参数和返回类型的函数对象 (类模板特化)(C14 起) 成员类型 类型定义result_type(C17 中弃用)Tfirst_argument_type(C17 中弃用)Tsecond_argument_type(C17 中弃用)T(C20 前)
成员函数 operator() 返回二个参数逐位与的结果 (公开成员函数) std::bit_and::operator() T operator()( const T lhs, const T rhs ) const; (C14 前) constexpr T operator()( const T lhs, const T rhs ) const; (C14 起)
返回 lhs 和 rhs 逐位与的结果。
参数
lhs, rhs-要计算逐位与的值
返回值
lhs rhs 的结果。
异常
无
可能的实现
constexpr T operator()(const T lhs, const T rhs) const
{return lhs rhs;
} std::bit_andvoid
std::bit_andvoid template class bit_andvoid; (C14 起)
std::bit_and 是 std::bit_and 的特化拥有推导出的参数和返回类型。
成员类型
成员类型定义is_transparent/* 未指定 */
成员函数 operator() 应用 operator 到 lhs 和 rhs (公开成员函数) std::bit_and::operator()
template class T, class U constexpr auto operator()( T lhs, U rhs ) const - decltype(std::forwardT(lhs) std::forwardU(rhs));
返回 lhs rhs 的结果。
参数
lhs, rhs-为之计算逐位与的值
返回值
lhs rhs 的结果。 调用示例
#include iostream
#include functionalstruct Cell
{int x;int y;Cell() default;Cell(int a, int b): x(a), y(b) {}Cell(const Cell cell){x cell.x;y cell.y;}Cell operator(const Cell cell){x cell.x;y cell.y;return *this;}Cell operator(const Cell cell){x cell.x;y cell.y;return *this;}Cell operator*(int n){x * n;y * n;return *this;}Cell operator(){x 1;y 1;return *this;}friend Cell operator (const Cell cell1, const Cell cell2){Cell cell cell1;cell cell2;return cell;}friend Cell operator *(const Cell cell1, const Cell cell2){Cell cell {cell1.x * cell2.x, cell1.y * cell2.y};return cell;}friend Cell operator /(const Cell cell1, const Cell cell2){Cell cell {cell1.x / cell2.x, cell1.y / cell2.y};return cell;}friend Cell operator %(const Cell cell1, const Cell cell2){Cell cell {cell1.x % cell2.x, cell1.y % cell2.y};return cell;}friend bool operator (const Cell cell1, const Cell cell2){return cell1.x cell2.x cell1.y cell2.y;}friend bool operator !(const Cell cell1, const Cell cell2){return cell1.x ! cell2.x cell1.y ! cell2.y;}friend bool operator (const Cell cell1, const Cell cell2){if (cell1.x cell2.x){return cell1.y cell2.y;}else{return cell1.x cell2.x;}}friend bool operator (const Cell cell1, const Cell cell2){if (cell1.x cell2.x){return cell1.y cell2.y;}else{return cell1.x cell2.x;}}friend bool operator (const Cell cell1, const Cell cell2){return cell1.x cell2.x cell1.y cell2.y;}friend bool operator ||(const Cell cell1, const Cell cell2){return cell1.x || cell2.x || cell1.y || cell2.y;}friend bool operator !(const Cell cell){return !(cell.x cell.x);}friend Cell operator (const Cell cell1, const Cell cell2){Cell cell {cell1.x cell2.x, cell1.y cell2.y};return cell;}friend Cell operator |(const Cell cell1, const Cell cell2){Cell cell {cell1.x | cell2.x, cell1.y | cell2.y};return cell;}friend Cell operator ^(const Cell cell1, const Cell cell2){Cell cell {cell1.x ^ cell2.x, cell1.y ^ cell2.y};return cell;}
};std::ostream operator(std::ostream os, const Cell cell)
{os { cell.x , cell.y };return os;
}int main()
{std::cout std::boolalpha;int *ptr nullptr;
// std::cout std::bit_andint*()(ptr, nullptr):
// std::bit_andint*()(ptr, nullptr) std::endl;std::cout std::bit_andchar()(50, 2): std::bit_andchar()(50, 2) std::endl;std::cout std::bit_andchar()(a, 97): std::bit_andchar()(a, 97) std::endl;std::cout std::bit_andint()(1023, 1024): std::bit_andint()(1023, 1024) std::endl;std::cout std::bit_andlong()(1023, 1024): std::bit_andlong()(1023, 1024) std::endl;std::cout std::bit_andlong long()(1023, 1024): std::bit_andlong long()(1023, 1024) std::endl;std::cout std::bit_anduint8_t()(1023, 1024): std::bit_anduint8_t()(8, 32) std::endl;std::cout std::bit_anduint16_t()(123, 456): std::bit_anduint16_t()(123, 456) std::endl;std::cout std::bit_anduint32_t()(101, 202): std::bit_anduint32_t()(101, 202) std::endl;std::cout std::bit_anduint64_t()(10230, 10240): std::bit_anduint64_t()(10230, 10240) std::endl;std::cout std::bit_andint8_t()(1023, 1024): std::bit_andint8_t()(8, 32) std::endl;std::cout std::bit_andint16_t()(123, 456): std::bit_andint16_t()(123, 456) std::endl;std::cout std::bit_andint32_t()(101, 202): std::bit_andint32_t()(101, 202) std::endl;std::cout std::bit_andint64_t()(10230, 10240): std::bit_andint64_t()(10230, 10240) std::endl;// std::cout std::bit_anddouble()(3.14, 3.14):
// std::bit_anddouble()(3.14, 3.14) std::endl;
// std::cout std::bit_andfloat()(3.14, 3.14):
// std::bit_andfloat()(3.14, 3.14) std::endl;
// std::cout std::bit_andfloat()(3, 3):
// std::bit_andfloat()(3, 3) std::endl;
// std::cout std::bit_andfloat()(3.56, 3.14):
// std::bit_andfloat()(3.56, 3.14) std::endl;
// std::cout std::bit_andint()(3.14, 3.14):
// std::bit_andint()(3.34, 3.34) std::endl;std::cout std::bit_andCell()(Cell{101, 101}, Cell{202, 202}): std::bit_andCell()(Cell{101, 101}, Cell{202, 202}) std::endl;//编译失败
// std::cout std::bit_andstd::string()(\I am a \, \handsome programmer\):
// std::bit_andstd::string()(I am a , handsome programmer) std::endl;return 0;
}输出
std::bit_andchar()(50, 2):
std::bit_andchar()(a, 97): a
std::bit_andint()(1023, 1024): 0
std::bit_andlong()(1023, 1024): 0
std::bit_andlong long()(1023, 1024): 0
std::bit_anduint8_t()(1023, 1024):
std::bit_anduint16_t()(123, 456): 72
std::bit_anduint32_t()(101, 202): 64
std::bit_anduint64_t()(10230, 10240): 8192
std::bit_andint8_t()(1023, 1024):
std::bit_andint16_t()(123, 456): 72
std::bit_andint32_t()(101, 202): 64
std::bit_andint64_t()(10230, 10240): 8192
std::bit_andCell()(Cell{101, 101}, Cell{202, 202}): {64,64}