2

假设我需要从我的 C++ 代码中输出一些程序代码。所以我需要打印如下内容:

cout << "foo(\"hello\", \"world\", 5)" << endl;

有没有办法让我不需要逃避每个“?

4

3 回答 3

14

使用 C++11,您可以做到

R"delimeter(foo("hello", "world",5))delimeter"

whereR"delimeter(定义原始字符串的开头, delimeter最多 16 个字符的标签,并)delimeter"结束原始字符串。

于 2012-10-21T06:06:38.263 回答
5

如果你使用 C++03,你可以使用宏来做你想做的事:

#define PRINT_STRING(s) cout << (#s) << endl;

int main() {
    cout << "foo(\"hello\", \"world\", 5)" << endl;
    PRINT_STRING(foo("hello", "world", 5))
    return 0;
}

退货

output:
foo("hello", "world", 5)
foo("hello", "world", 5)

你可以在这里看到它:http: //ideone.com/G6TvU3

于 2012-10-21T08:31:05.020 回答
3

如果您的编译器支持 C++11,则多行引号构造为R"LABEL(Where LABEL is a valid label。结束报价使用)LABEL"

于 2012-10-21T06:05:09.077 回答