请看这段代码:
void fn(const char *s) { }
void fn(const char (&s)[4]) { }
int main() {
fn("bla");
}
此代码无法编译,因为fn
中main
的调用不明确。这是为什么?根据C ++ 14标准(2.14.5 / 8),"bla"
的类型是 n const char 的数组,所以我希望第二个fn
将被调用。
我可以以某种方式实现我可以区分编译时字符串和const char *
,因此将调用fn
的不同版本(在某种程度上,对于编译时字符串,我有字符串的长度)?就像使用它一样(这不起作用,因为fn(const char *)
将被使用):
template <std::size_t S>
void fn(const char (&s)[S]) { }