我有點假設基於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字符串? –