我有点假设基于for循环将支持C风格的字符串范围终止字符串
void print_C_str(const char* str)
{
for(char c : str)
{
cout << c;
}
}
该范围然而,这并非如此,标准[stmt.ranged] (6.5.4)
说,基于范围换在3种可能性之一的工作原理:
- 范围是一个数组
- 范围是与可呼叫
begin
和end
方法的类 - 有ADL可达在相关命名空间(加上
std
命名空间)
当我在全局命名空间中添加对const char*
begin
和end
功能,我仍然得到错误(来自VS12和GCC 4.7)。
有没有办法让基于范围的for循环使用C风格的字符串?
我尝试添加的过载namespace std
这个工作,但我的理解是非法的重载添加到namespace std
(这是正确的?)
可以合法地专注于std名字空间的模板。 – inf
@bamboon true,但是IIRC只适用于用户定义的类型,这是一个重载而不是专门化,并且对于内置类型而不是UDT。 – Motti
你为什么绕过C字符串? –