首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么adl优先使用'boost::range_detail::operator|‘而不是本地的'operator|'?

adl优先使用'boost::range_detail::operator|'而不是本地的'operator|',是因为ADL(Argument-Dependent Lookup,参数相关查找)规则的影响。

ADL是C++中的一种查找规则,它在函数调用时会考虑到参数的命名空间,从而在调用函数时会自动查找与参数相关的函数。当使用'operator|'进行函数调用时,编译器会首先在参数的命名空间中查找与之相关的函数。

在这个问题中,adl优先使用'boost::range_detail::operator|'而不是本地的'operator|',是因为'boost::range_detail::operator|'是与参数相关的函数,而本地的'operator|'可能不在参数的命名空间中。

'boost::range_detail::operator|'是Boost库中的一个函数,它用于处理范围操作,例如对容器进行过滤、映射等操作。它具有丰富的功能和灵活性,可以方便地对容器进行各种操作。

推荐的腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

c++11-17 模板核心知识(十三)—— 名称查找与ADL

this->count就是一个qualified name,但count不是,因为它作用域没有被显示指明,即使它和this->count是等价。 dependent name:依赖于模板参数。...在函数调用表达式中(f(a1, a2, a3, ... ),包含隐式调用重载operator,例如 << ),ADL应用一系列规则来查找unqualified function names。...ADL会将函数表达式中实参associated namespaces和associated classes加入到查找范围,这也就是为什么叫Argument-Dependent Lookup....理解为什么需要ADL、什么时候应用到ADL时,按照对应场景再去查就行~ 额外需要注意一点是,ADL会忽略using : #include namespace X { template...ADL缺点 依赖ADL有可能会导致语义问题,这也是为什么有的时候需要在函数前面加::,或者一般推荐使用xxx::func,不是using namespace xxx 。

62030

(大boss)C++惯用法之copy-swap

C++惯用法之copy-swap 为什么我们需要复制和交换习惯? 任何管理资源类(包装程序,如智能指针)都需要实现big three。尽管拷贝构造函数和析构函数目标和实现很简单。...从概念上讲,它通过使用拷贝构造函数功能来创建数据本地副本,然后使用交换功能获取复制数据,将旧数据与新数据交换来工作。然后,临时副本将销毁,并随身携带旧数据。我们剩下是新数据副本。...交换函数是一种不抛异常函数,它交换一个类两个对象或者成员。我们可能很想使用std :: swap不是提供我们自己方法,但这是不可能。...(不仅如此,对swap无条件调用将使用我们自定义swap运算符,从而跳过了std :: swap会导致不必要类构造和破坏。)...= rhs) { delete ptr_; ptr_ = new T(rhs.ptr_); // 当new 发生异常,此时ptr_指向而是一块被删除区域,不是被赋值对象区域

1.5K20

C++核心准则T.47:避免使用通用名称高度不受限模板

T.47: Avoid highly unconstrained templates with common names T.47:避免使用通用名称高度不受限模板 Reason(原因) An unconstrained...不受限模板参数会完美匹配任何东西,因此这样模板可以覆盖需要轻微转换特定类型。当使用ADL时,这种情况很麻烦/危险。通用名称会让这个问题更容易发生。...现在Bad中==被设计用于引发问题,但是你能定位到实际代码中问题么?问题是v.size()返回一个无符号整数,因此调用本地==时需要转换;Bad中==则不需要转换。...如果不受限模板被定义在类型相同命名空间,这个不受限模板可以被ADL发现(就像示例代码中发生那样。)。也就是说,它是高度可见。...本规则应该是没有必要,但是委员会不能同意将非受限模板从ADL中排除出去。

45130

copy-and-swap 是什么

回答 为什么需要 copy-and-swap 呢? 任何资源管理类(比如智能指针)都需要遵循一个规则:三法则。...其中复制构造函数和析构函数实现起来比较容易,但是赋值运算符(=)要复杂许多, copy-and-swap 就是实现赋值运算符(=)完美解决方案。它既能避免代码冗余,还可以提供 强异常安全保证。...(译注:我随后查看了 boost、folly 和 MSVC 实现,它们都加上了自判断检查。) 序号(2)处:仅提供了基本异常安全保证。...friend void swap(dumb_array& first, dumb_array& second) // nothrow { // enable ADL (not necessary...另外有人疑问 dumb_array& operator=(dumb_array other) 参数是值传递,也可以换成引用传递嘛,就像下面这样, dumb_array& operator=(const

82610

现代C++之ADL

什么是“依赖于参数查询”(又名ADL或“ Koenig查找”)? Koenig查找或参数依赖查找描述了C ++编译器如何查找不合格名称 。...它是如何工作? 该算法告诉编译器不仅要查看本地作用域,还要查看包含参数类型名称空间。...如果没有Koenig查找,那么程序员将不得不负担重复指定完全限定名称费用,或者使用大量using声明。 为什么批评Koenig查找?...使用Koenig查找时,使用此算法时必须谨慎,因为: std::swap(obj1,obj2); 可能不会显示以下行为: using std::swap; swap(obj1, obj2); 使用ADL...如果存在命名空间A,并且存在A::obj1,A::obj2和A::swap(),则第二个示例将导致对A::swap()调用,这可能不是用户想要

1.5K30

C++那些事之ADL

什么是“依赖于参数查询”(又名ADL或“ Koenig查找”)? Koenig查找或参数依赖查找描述了C ++编译器如何查找不合格名称 。...它是如何工作? 该算法告诉编译器不仅要查看本地作用域,还要查看包含参数类型名称空间。...如果没有Koenig查找,那么程序员将不得不负担重复指定完全限定名称费用,或者使用大量using声明。 为什么批评Koenig查找?...使用Koenig查找时,使用此算法时必须谨慎,因为: std::swap(obj1,obj2); 可能不会显示以下行为: using std::swap; swap(obj1, obj2); 使用ADL...如果存在命名空间A,并且存在A::obj1,A::obj2和A::swap(),则第二个示例将导致对A::swap()调用,这可能不是用户想要

92610

线程本地存储-The Boost C++ Libraries

,翻译这篇博文时Boost最新版本是1.73.0 线程本地存储 线程本地存储(TLS)是专用存储区,只能由一个线程访问。...一旦创建了boost::thread_specific_ptr类型变量,就可以对其进行设置。该变量需要布尔类型变量地址,不是变量本身地址。...因为boost :: thread_specific_ptr存储一个地址,所以此类行为类似于指针。例如,它提供了成员函数operator *和operator->,它们可以像使用指针一样工作。...因为使用了TLS变量,所以每个线程都使用自己变量tls。当第一个线程使用指向动态分配布尔变量指针初始化tls时,第二个线程和第三个线程中tls变量仍未初始化。...由于TLS变量是每个线程全局不是每个进程全局,因此在一个线程中使用tls不会更改任何其他线程中变量。

1.1K30

C++ 新特性学习(二) -- Array、Tuple和Hash库

这回两个库没怎么用过,这里记录就用VC++写了,使用G++和BOOST时候和智能指针类似。...首先是Tuple库 要注意是这里G++,VC++和BOOST函数不太一样,所以使用时候要注意没有使用到编译器和编译器相关函数(特别是IDE弹窗方法要注意)。...比如VC++和G++里tuple对象没有get方法,boost里有,所以获取数据智能用get(tuple&)语句。 这是个多元数组,最多有10个元素,用于方便定义复杂逻辑结构。...普通数组不支持STL,当std::vector效率不满足需求时候array力量就出来了,使用不是一般简单。...&)方法或函数,我使用boost库正常,但是VC++下用tr1编译错误,错误在自定义hash函数上,但没看懂报错原因,也没有详细例子或文档。

1K10

C++最佳实践 | 2. 代码风格

使用nullptr C++11引入了nullptr表示空指针,应该用来代替0或NULL来指示空指针。 注释 注释块应该使用//,不是/* */,使用//可以更容易在调试时注释掉代码块。...使用""表示include本地文件 ...表示include系统文件[11]。 // Bad Idea....,否则优先使用{}初始化,不是=。...由于宏有不遵守命名空间等问题,因此能用模板地方就不要用宏。 明智使用操作符重载 运算符重载是为了支持表达性语法。比如让两个大数相加看起来像a + b,不是a.add(b)。...对于所有其他操作符,通常只有在需要在上下文中使用时才重载。典型场景是用+连接事物,负号可以被认为是“真”或“假”表达式,等等。 一定要注意操作符优先级[15],尽量避免不直观结构。

1.2K10

C++ 智能指针详解

当我们不想让 my_memory 继续生存下去,我们调用 release() 函数释放内存,结果却导致内存泄露(在内存受限系统中,如果my_memory占用太多内存,我们会考虑在使用完成后,立刻归还,不是等到...总结:std::auto_ptr 可用来管理单个对象对内存,但是,请注意如下几点: (1)    尽量不要使用operator=”。如果使用了,请不要再使用先前对象。...首先 boost::weak_ptr 是专门为 boost::shared_ptr 准备。有时候,我们只关心能否使用对象,并不关心内部引用计数。...,不改变其引用计数,当被观察 boost::shared_ptr 失效后,相应 boost::weak_ptr 也相应失效。...,用于指向子类boost::shared_ptr,这样基类仅仅观察自己 boost::weak_ptr 是否为空就知道子类有没对自己赋值了,不用影响子类 boost::shared_ptr 引用计数

1.9K10

C++ 智能指针

当我们不想让 my_memory 继续生存下去,我们调用 release() 函数释放内存,结果却导致内存泄露(在内存受限系统中,如果my_memory占用太多内存,我们会考虑在使用完成后,立刻归还,不是等到...由于 std::auto_ptr 引发了诸多问题,一些设计并不是非常符合 C++ 编程思想,所以引发了下面 boost 智能指针,boost 智能指针可以解决如上问题。 让我们继续向下看。...首先 boost::weak_ptr 是专门为 boost::shared_ptr 准备。有时候,我们只关心能否使用对象,并不关心内部引用计数。...,不改变其引用计数,当被观察 boost::shared_ptr 失效后,相应 boost::weak_ptr 也相应失效。...,用于指向子类 boost::shared_ptr,这样基类仅仅观察自己 boost::weak_ptr 是否为空就知道子类有没对自己赋值了,不用影响子类 boost::shared_ptr 引用计数

99040

C++:智能指针

一、智能指针使用及原理 1.1 为什么需要智能指针 在学习异常时候,我们知道了由于异常反复横跳可能会导致内存泄露问题,但是对于一些自定类类型来说他在栈帧销毁时候会去调用对应析构函数...如果不是0,就说明除了自己还有其他对象在使用该份资源,不能释放该资源,否则其他对象就成野指针了。 易错点1:引用计数应该如何表示???...,然后再使用wake_ptr来解决这个场景 1.9 shared_ptr定制删除器 为什么需要定制删除器呢??...C++ boost给出了更实用scoped_ptr和shared_ptr和weak_ptr. 3. C++ TR1,引入了shared_ptr等。不过注意是TR1并不是标准版。 4....可以把boost库理解成体验服 三、内存泄露 3.1 什么是内存泄漏,内存泄漏危害 什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用内存情况。

7600

使用Kube Startup CPU Boost加速Kubernetes工作负载启动时间

一个选择是配置更大请求以满足峰值资源需求。这不是一种最佳方法,会导致资源利用不足。它还会产生不必要基础设施成本,因为并非所有时间都在使用。...Java 虚拟机资源使用模式 Java 应用程序通常需要随时间变化不同资源。Java 是一种动态、解释型语言,基于“一次编写,到处运行”原则。...它通过生成通用字节码不是特定架构机器码来实现这一点,需要 Java 虚拟机(JVM)来运行应用程序。JVM 在启动时通常需要更多资源,而在运行时则需要更少。...受益于 in-place resource resize 解决方案之一是 Kube Startup CPU Boost,这是一个 Kubernetes operator ,用于增加 Pod CPU...新 Kubernetes in-place POD 调整功能旨在解决这个问题, Kube Startup CPU Boost 解决方案演示了如何利用这一新功能。

4400

Boost asio 官方教程

请留意,我们只是传入了 handler() 函数名字,该函数本身并没有被调用。 async_wait() 好处是,该函数调用会立即返回,不是等待五秒钟。...一旦闹钟时间到,作为参数所提供函数就会被相应调用。 因此,应用程序可以在调用了 async_wait() 之后执行其它操作,不是阻塞在这里。...由于域名解析不是发生在本地,所以它也被实现为一个异步操作。 一旦域名解析成功或被某个错误中断,resolve_handler() 函数就会被调用。...它与原来 boost::asio::deadline_timer 区别在于,计时器时长是作为参数传递给 wait() 或 async_wait() 方法不是传给构造函数。...在实践上,应该优先使用 boost::asio::deadline_timer,因为它已经集成在 Boost.Asio 中了。

17.2K71

boost信号槽原理和实践

(在实时forloop中怎么安排每项事情) boost signal2提供了这么一种高性能底层库。这里我觉得在一些场景下,boost signal2也是不错选择。...二、boost设计原理 2.1 boost signal2一些设计亮点 “类型擦除”,即通过使用动态分派接口消除静态类型信息,在 Boost.Signals 库中广泛使用,以减少模板实例化生成代码量...为了对抗这种所谓“模板膨胀”,使用 Boost.Function 和 Boost.Any 来存储未知类型和操作。...Boost.Signals2 可以指定多个返回值绑定 Signals2使用 "pull" 模式,不是 "push" 模式....原来Boost.Signals 使用boost::signals::trackable派生类。 由于boost::signals::trackable派生类析构函数顺序先于base类析构函数。

30010

C++特殊定制:揭秘cpo与tag_invoke!

一、C++定制概述 要理解cpo机制产生和使用,并不是一件容易事。说实话,笔者第一次看到这个机制,也是一头雾水,总有种剧本拿错,这不是我认识C++感觉,成功击中自己知识盲区。...memory_resource::allocate()此处则是“Point B”,库本身始终是使用这个接口来调用相关代码,注意此处“Point A”与“Point B”是不同名。...而且当我们使用std::swap()和不带命名空间swap()时,得到又是完全不一样语义,前者调用始终是模板实现std::swap版本,而后者可以正确利用ADL匹配到用户自定义swap,或者模板版本实现...,这显然不是我们想要看到情况。...ADL?-通过swap实现,我们猜测它可能是比较接近真相机制,但swap本身实现就有它问题,并不是一个特别优雅解决方案。

81910

Signals-The Boost C++ Libraries

或者,您可以使用头文件boost/signals2.hpp,它是一个主头文件,定义了Boost.Signals2中可用所有类和函数。...示例67.3 使用boost::signals2::signal多个事件处理程序 #include #include using namespace...boost::signals2::signal使用boost::signals2::optional_last_value作为默认组合器。该组合器返回类型为boost::optional对象。...请注意,不可能首先将迭代器直接传递到std::min_element(),因为此算法需要正向迭代器,组合器则与输入迭代器一起使用。...这就是为什么使用std::min_element()确定最小值之前,使用向量存储所有返回值原因。 例67.9修改了组合器,以将所有返回值存储在容器中,不是对其求值。

1.2K40

C++智能指针

6、std::weak_ptr 7、删除器 8、C++11和boost中智能指针关系 零、前言 本章主要讲解学习C++中智能指针概念及使用 一、为什么需要智能指针 示例: double Division...,用来记录该份资源被几个对象共享 在对象被销毁时(也就是析构函数调用),就说明自己不使用该资源了,对象引用计数减一 如果引用计数是0,就说明自己是最后一个使用该资源对象,必须释放该资源 如果不是0,...C++11和boost中智能指针关系 C++ 98 中产生了第一个智能指针auto_ptr C++ boost给出了更实用scoped_ptr和shared_ptr和weak_ptr C++ TR1...不过注意是TR1并不是标准版 C++ 11,引入了unique_ptr和shared_ptr和weak_ptr。需要注意是unique_ptr对应boostscoped_ptr。...并且这些智能指针实现原理是参考boost实现

59020
领券