1

这段用c++写的代码是什么意思?

PGBulkInserter pgBulkInserter(postgreSQL, HOST_TRAFFIC_SCHEMA_NAME, date,
                            flushSize, "%ud, %ud, %ud, %ud, %ud, " \
                            "%ul, %ul, %Vul, %Vud, %Vud, %Vud, %Vul, " \
                            "%Vud, %Vud, %Vud, %Vud, %Vud, %ud, %ud, " \
                            "%ud, %ud, %ud");

我知道它正在创建一个实例PGBulkinserter,但是等的含义是什么%ul, %ud %vud?您能解释一下更深层次的含义(即,有多少个参数PGbulkinsterter等)吗?

我认为它们就像 types%d, %f等。有谁知道是否 %ud意味着%d(我只是在猜测)的无符号版本。

编辑:我很确定这%ud是一个 32 位无符号十进制,用于另一段代码中的时间。此外,"%ul, %ul, %Vul, %Vud, %Vud, %Vud, %Vul, "与表中所有条目的类型有关。现在,问题是什么是\

4

1 回答 1

1

如果这应该是一个初始化(构造函数调用),那么它将 5 个参数传递给构造函数。最后一个参数是字符串文字。它没有 C++ 特定的含义。它的含义是由功能决定的。阅读函数文档以了解其含义。它看起来类似于 C 风格的格式字符串 ( fscanf/ fprintf),但实际的说明符 (like %Vud) 不是标准的。

最后一个参数实际上是一个拆分为多行的单个字符串文字。C++ 语言将连续的字符串文字(即用空格分隔的文字)连接成单个文字。例如这个看似独立的文字序列

"Hel" "lo" " worl" 
"d"

实际上被编译器解释为单个文字

"Hello world"

行尾的\字符使预处理器将源文件的几行合并为一行。为此,该\字符必须是该行的最后一个字符(如您的示例中所示)。例如,这个

in\
t\
  ma\
in(\
)

相当于

int main()

换句话说,您的代码示例实际上等同于

PGBulkInserter pgBulkInserter(postgreSQL, HOST_TRAFFIC_SCHEMA_NAME, date, flushSize, 
  "%ud, %ud, %ud, %ud, %ud, %ul, %ul, %Vul, %Vud, %Vud, %Vud, %Vul, %Vud, %Vud, %Vud, %Vud, %Vud, %ud, %ud, %ud, %ud, %ud");

该代码的作者显然认为,为了使编译器连接文字,必须先将它们强制成一行。为此,他们使用了这个\角色。然而,这是完全没有必要的,因为即使没有\.

在您的特定代码示例中,您可以完全删除\每行末尾的字符,它对程序绝对没有影响。有时人们\无论如何都会使用这些来引起人们注意他的事实,即字面继续在下一行。

于 2012-12-17T06:13:47.793 回答