为什么使用向量类我应该编写名称空间说明符std::vector
但std::find
函数我可以省略std::
?有什么不同?两者都是在std
命名空间中定义的,对吗?C++:类和函数的名称空间说明符
回答
为什么使用Vector类我应该写名字空间说明符的std ::向量但对于标准::发现功能我可以省略std ::?
一般情况下,这是不正确的。
有什么区别。两者都是在std命名空间中定义的,对吗?
是的,并且在原则上没有什么区别。每款C++ 11标准的17.6.1.1/2:
所有图书馆的实体,除了宏,新的运营商和operator delete的命名空间
std
或命名空间的嵌套命名std
内内定义。 [...]
但是,你必须记住,异常是由Argument-Dependent Lookup规则允许:感谢这个查询技术,它是没有必要明确指定一个函数的命名空间,因为名称将在您提供给该函数的参数的命名空间中查找。
因此,如果功能发生在相同的命名空间的任何参数来定义,它将由编译器发现,尽管它的名字不与空间限定它属于:
namespace N
{
struct X { };
void foo(X) { }
}
int main()
{
N::X x;
foo(x); // OK
}
因此,如果您正在调用std::find()
一些论点是在std
命名空间中定义的类型的情况下,你会不会需要调用资格find()
与std::
。例如:
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
std::vector<int> v { 1, 2, 3 };
auto i = find(v.begin(), v.end(), 2); // ADL applies if the result of
// v.begin() and v.end() is an
// iterator whose type is defined
// in the std namespace!
std::cout << *i;
}
显然,这不能适用于接受没有参数的函数。在这种情况下,名称空间限定始终是必要的,当然,除非调用的一点是,命名空间中(虽然你不能任何添加到std
命名空间,从std
命名一些模板可以专门)。
然后afther你不需要使用所有的时间STD字 但在实际所有的对象都是这样的std ::法院给std :: cin
STD是C++
soorry,我的英语需要校正的基本LIBRAIRIE之一;)
这取决于您如何拨打std::find
...例如,如果你从std容器传递了一些迭代器,这个函数将被ADL找到,否则你必须添加std::
来调用它。
由于某些原因,STL选择在全局名称空间中公开许多算法(in)。这就是为什么你可以写查找(...)或变换(...)。载体未曝光,因此您必须执行std::vector<>()
。或者您可以在文件顶部使用std::vector;
这是不正确的。从C++标准(17.6.1.1/2)开始:“*除宏,运算符new和运算符delete之外的所有库实体都在命名空间std中定义或名称空间中嵌套命名空间std * – 2013-02-23 21:19:51
- 1. 函数名称的全局名称空间说明符用typedef正确解析?
- 2. ID名称和类名称说明
- 3. C++类的声明和命名空间
- 4. 详细类型说明符中的类型依赖嵌套名称说明符
- 5. 头文件类成员函数声明错误:嵌套名称说明符中的“不完整类型”名称
- 6. 声明名称空间中的类
- 7. 没有在名称空间外声明的类体的C++类
- 8. C#中的名称空间和子名称空间#
- 9. 在名称空间中声明和定义函数?
- 10. 函数查找和名称空间
- 11. XSLT函数和名称空间
- 12. C++/CLI - 名称空间和类的模糊符号
- 13. 将名称空间声明为宏 - C++
- 14. MSXML C++声明默认名称空间
- 15. opencv命名空间和c,C++函数
- 16. 在xaml中声明类名称空间
- 17. xslcompiledtransform输出函数和名称空间的名称
- 18. phpdoc数据类型和名称空间
- 19. 使用名称空间中的参数声明函数
- 20. 如何在C中实现在C++名称空间中声明的函数?
- 21. C++名称空间别名和前向声明
- 22. c#将名称空间的声明添加到所有类
- 23. C# - 名称空间中的类型声明
- 24. Javascript名称空间声明
- 25. 别名类型中的详细说明类型说明符
- 26. 一个类中的C#名称空间
- 27. C++,名称空间,模板和无匹配函数调用
- 28. C++函数重载,表达式模板和名称空间
- 29. 命名空间和类名称准则
- 30. 这是名称命名空间和类
这里的内容是什么?示例源代码? – Cornstalks 2013-02-23 21:07:19