为何func(“abc”“def”);编译

时间:2011-09-14 14:40:33

标签: c++ compiler-construction standards

在我的代码中偶然发现了一个小姐,这个函数被称为

func("text1" "text2");

而不是

func("text1", "text2");

事实是它实际上编译并运行(MSVC 2008),两个字符串被视为一个(即对重载func的调用获取输入“text1text2”)。

这是正常的标准行为(即“abc”“def”==“abcdef”)还是不是?

4 个答案:

答案 0 :(得分:8)

是的,这称为string literal concatenation,是C和C ++编译器的一个功能。

答案 1 :(得分:4)

是的,这是正常行为。字符串常量跨越多行非常有用。你必须在某个地方有一个“func”的重载,它可以接受char*的单个参数。

答案 2 :(得分:3)

是的,这是标准行为。

答案 3 :(得分:2)

是的,它对于根据#define构建字符串非常有用。

#define MY_FOLDER "/some/folder/"
#define MY_FILE   MY_FOLDER "file.txt"
// expands to "/some/folder/file.txt"