Bad Man
Bad Man

Reputation: 157

How to write a string literal which contains double quotes

I need to do the following C# code in C++ (if possible). I have to initialize a long string with lots of quotes and other stuff in it.

// C# verbatim string
const String _literal = @"I can use "quotes" inside here";

Upvotes: 14

Views: 4169

Answers (4)

R Samuel Klatchko
R Samuel Klatchko

Reputation: 76541

That is not available in C++03 (the current standard).

That is part of the C++0x draft standard but that's not readily available just yet.

For now, you just have to quote it explicitly:

const std::string _literal = "I have to escape my quotes in \"C++03\"";

Once C++0x becomes reality, you'll be able to write:

const std::string _literal = R"(but "C++0x" has raw string literals)";

and when you need )" in your literal:

const std::string _literal = R"DELIM(more "(raw string)" fun)DELIM";

Upvotes: 35

SoapBox
SoapBox

Reputation: 20609

There is no equivalent of C#'s "@" in C++. The only way to achieve it is to escape the string properly:

const char *_literal = "I can use \"quotes\" inside here";

Upvotes: 7

Brian R. Bondy
Brian R. Bondy

Reputation: 347196

There is no raw string literals in C++. You'll need to escape your string literals.

std::string str = "I can use \"quotes\" inside here";

C++0x offers a raw string literal when it's available:

R"C:\mypath"

By the way you should not name anything with a leading underscore as such identifiers are reserved in C++.

Upvotes: 5

Mark Rushakoff
Mark Rushakoff

Reputation: 258128

There is no such mechanism in C++. You'll have to do it the old fashioned way, by using escapes.

You might be able to use a scripting language to make the escaping part a little easier, though. For instance, the %Q operator in Ruby will return a properly escaped double-quoted string when used in irb:

irb(main):003:0> %Q{hello "world" and stuff     with    tabs}
=> "hello \"world\" and stuff\twith\ttabs"

Upvotes: 2

Related Questions