该代码用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有多少个参数,等等)?

我认为它们就像%d, %f等类型。有人知道%ud是否表示%d的未签名版本(我只是在猜测)。

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

最佳答案

如果应该将其初始化(构造函数调用),则它将5个参数传递给构造函数。最后一个参数是字符串文字。它没有特定于C++的含义。它的含义由功能决定。阅读功能文档以了解其含义。它看起来类似于C样式的格式字符串(fscanf / fprintf),但是实际的说明符(如%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");

该代码的作者显然认为,为了使编译器连接文字,必须首先将它们强制为一行。为此,他们使用了\字符。但是,这是完全没有必要的,因为即使没有\,这些文字也将被串联起来。

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

关于c++ - %ud,%vud那些是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13909004/

10-10 16:32