我想写一些带字符串文字的函数 - 只有一个字符串文字:
template <size_t N>
void foo(const char (&str)[N]);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这太过于扩展并且会匹配任何数组char- 无论它是否是真正的字符串文字.虽然在编译时无法区分它们之间的区别 - 而不必在运行时求助调用者包装文字/数组 - 但这两个数组将在内存中完全不同的位置:
foo("Hello"); // at 0x400f81
const char msg[] = {'1', '2', '3'};
foo(msg); // at 0x7fff3552767f
Run Code Online (Sandbox Code Playgroud)
有没有办法知道字符串数据在内存中的位置,以便我至少可以assert使该函数仅采用字符串文字?(使用gcc 4.7.3,但实际上任何编译器的解决方案都会很棒).