Boost如何直接将流插入到C字符串中?

时间:2016-01-28 21:13:55

标签: c++ boost

this example和几个相关页面中,Boost似乎直接在const char数组上使用流插入运算符(<<<<<<<<<<<<对象)。

BOOST_TEST_INFO("With parameter j = " << j);

有或没有&#39; BOOST_TEST_INFO&#39;或其他宏,我一直得到预期的编译器错误

error: invalid operands of type const char[#] and int to binary operator<<

在Boost标题中有一个名为basic_cstring.hpp的文件我认为是相关的,但它没有明确地包含在示例中(并且包含来自我的源代码似乎没有什么区别) 。)我错过了什么?

编辑 - 当且仅当在预处理期间发现周围的宏时,才选择流插入运算符;否则,第一个错误是红色鲱鱼&#34;无效运算符...到二元运算符&#34;。向BOOST_TEST_MESSAGE提供完全相同的行成功,但没有声明BOOST_TEST_INFO,BOOST_TEST_CONTEXT等,这是一个单独的问题(据我所知)。

2 个答案:

答案 0 :(得分:6)

宏扩展为SOMETHING << "With parameter j = " << j,因此它不会在字符串文字中插入任何内容,只需cout << 1 << 22插入1

答案 1 :(得分:3)

很容易看到预处理输出 - 这有助于理解它。例如,使用以下代码剪切:

#define CHECK(x) std::cout << x

CHECK("Oh" << "My" << "Gott" << 42 << "!");

并在&#39;输出预处理代码中运行编译器&#39;模式(通常-E切换)。您将看到以下内容:

~>g++ -E cc.cpp

# 1 "cc.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "cc.cpp"


std::cout << "Oh" << "My" << "Gott" << 42 << "!";

这很清楚,不是吗?