【发布时间】:2014-04-12 21:06:28
【问题描述】:
如果我调用这个函数:
template <typename t>
size_t
Foo(const T& str) {
return std::distance(std::begin(str), std::end(str));
}
...这三种类型:
const auto a = "abc";
const char b[3] = {'a', 'b', 'c'};
const std::string c("abc");
第一种类型会返回 4(包括 null),其他类型返回 3。如何区分这些类型,使它们都返回 3(字符数也是如此)?
【问题讨论】:
-
很遗憾,您无法将字符串文字与任何其他
const chars 数组区分开来。这是语言的限制。 -
例如,您可以检查最后一个字符是否为
'\0'(对于char的数组)。这当然会扩展到数组中任意位置的'\0'。 -
@KerrekSB
constexpr允许在编译时检查最后一个字节,但这不考虑 1) 当字符串转换为char *时,或 2) 当它包含一个内部 NUL 字节。 -
@Potatoswatter:没错。换句话说,您通常无法将字符串文字与 const-char 数组区分开来:-S
标签: templates c++11 generic-programming