我有点假设基于范围的 for 循环将支持 C 风格的字符串
void print_C_str(const char* str)
{
for(char c : str)
{
cout << c;
}
}
然而事实并非如此,该标准[stmt.ranged] (6.5.4)
表示基于范围的适用于以下三种可能性之一:
- 范围是一个数组
- 范围是具有可调用
begin
和end
方法的类 - 在关联的命名空间(加上
std
命名空间)中有可访问的 ADL
当我在全局命名空间中添加begin
和end
函数时,const char*
我仍然会收到错误(来自 VS12 和 GCC 4.7)。
有没有办法让基于范围的 for 循环与 C 风格的字符串一起工作?
我尝试添加重载namespace std
并且这有效,但据我了解,添加重载是非法的namespace std
(这是正确的吗?)