- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我刚刚发现标准 algorithm
header 中的几种算法不需要 std::
。
例子:
#include <vector>
#include <algorithm>
int main() {
std::vector<int> m;
count(m.begin(), m.end(), 0);
count_if(m.begin(), m.end(), [](auto){return true;});
for_each(m.begin(), m.end(), [](auto){});
find_if(m.begin(), m.end(), [](auto){return true;});
}
有什么具体原因吗? g++
和clang++
都接受上面的代码。
最佳答案
这里有两件事。
首先是 ADL,或 Argument Dependent Name Lookup .
这些功能是通过 ADL 找到的。这是因为一些参数(即 vector
的 iterator
类型)位于 std
中,所以当重载解析查找 for_each
,它查找通常的命名空间集(在本例中为 root),以及由其参数的命名空间确定的命名空间。
诀窍在于 vector::iterator
不保证是 namespace std
中的类型。所以你的代码不能保证工作。它可能是std
中的类型,也可能是原始指针,也可能是namespace __std__utility_types
中的类型,或其他任何地方.
所有主要的编译器库都有 vector
迭代器是非指针,它们在 namespace std
中,因为替代方案被认为更糟糕。但是缺乏保证意味着您不应该依赖它来获得真正可移植的代码。
关于c++ - 有什么理由 find_if、for_each、count 等不需要 std::?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41201298/
您好,我希望我的下一个输出(在本例中就是字母)在上一个输出之后输出 8 个空格。这适用于第一个字符,但之后的 printf 语句不起作用。它在第一个 printf 语句之后立即打印,我试图将其设置为
我想知道制作 std::list<>::splice 背后的基本原理是什么使引用被拼接到新容器中的子序列的迭代器无效。这对我来说有点不合逻辑,尤其是考虑到标准 std::container::swap
谁能告诉我为什么我应该使用 Azure Function 输出绑定(bind)(例如 SendGrid 或 Twilio)而不是仅仅在我的 C# 函数中显式使用适当的 SDK(例如 Sendgrid
我们在当前项目中使用 React 和 TypeScript,我遇到了以下行为。 import React, { Component } from 'react'; 我将上面的行替换为下面的行,因为它似
我是一名优秀的程序员,十分优秀!