为什么是 func( "abc" "def" );编译

Why func("abc" "def"); compiles

本文关键字:编译 def abc func 为什么      更新时间:2023-10-16

在我的代码中偶然发现了一个错误,一个函数被这样调用

func("text1" "text2");

代替

func("text1", "text2");

事情是,它实际上编译和运行(MSVC 2008),这两个字符串被视为一个(即调用一个重载的函数得到输入"text1text2")。

这是正常的标准行为吗?"abc" "def" == "abcdef")是不是?

是的,这被称为字符串文字连接,是C和c++编译器的一个特性。

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

是的,这是标准行为。

是的,它对于基于#define s构建字符串很有用。

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