बचने जीता ' के बाद से यह एक कच्चे शाब्दिक है, लेकिन वाक्य रचना आरंभ और अंत के स्पष्ट सीमांकन अनुमति देने के लिए डिज़ाइन किया गया है टी तुम्हारी मदद, aha
की तरह एक छोटे से मनमाना वाक्यांश शुरू करने से।
R"aha(
Some Text)"
)aha";
वैसे अंत में )
और "
के आदेश ध्यान रखें कि आपके उदाहरण के विपरीत।
(मानक का अध्ययन) औपचारिक, पहली नजर में के बारे में
यह के रूप में यदि भागने साधारण शाब्दिक में के रूप में कच्चे स्ट्रिंग शाब्दिक में एक ही काम करता है लग सकता है। एक को छोड़कर यह नहीं जानता कि यह नहीं है, तो यह कैसे संभव है, जब नियमों में कोई अपवाद नहीं देखा जाता है? खैर, जब कच्चे स्ट्रिंग शाब्दिक सी ++ 11 में पेश किए गए यह एक अतिरिक्त नाश अनुवाद चरण को शुरू करने जैसे के प्रभाव नाश के माध्यम से था भागने !, बुद्धि, और नरक करने के लिए;
सी ++ 11 §2.5/3
” बीच कच्चे स्ट्रिंग के प्रारंभिक और अंतिम दोहरे उद्धरण वर्ण, चरणों में प्रदर्शन किसी भी परिवर्तनों 1 और 2 (trigraphs, सार्वभौमिक-चरित्र -नाम, और रेखा splicing) वापस कर रहे हैं; इस वापसी से किसी भी डी-चार से पहले लागू नहीं होगी, आर-चार, या परिसीमन कोष्टक पहचान की है।
यह सी ++ में कर रहे हैं यूनिकोड वर्ण विनिर्देशों (सार्वभौमिक-चरित्र-नाम\u0042
की तरह) है, जो हालांकि वे देखते हैं और पलायन की तरह काम का ख्याल रखता है औपचारिक रूप से, दृश्यों से बच नहीं।
सच औपचारिक पलायन नियंत्रित किया जाता है, या बल्कि, एक कच्चे स्ट्रिंग शाब्दिक की सामग्री के लिए एक कस्टम व्याकरण नियम का उपयोग करके !, नहीं संभाला। अर्थात् सी ++ §2.14 में।5 कच्चे-स्ट्रिंग व्याकरण इकाई के रूप में परिभाषित किया गया है
"
डी-वर्ण-अनुक्रम ऑप्ट(
आर-चार-अनुक्रम ऑप्ट)
डी-वर्ण-अनुक्रम ऑप्ट"
, जहां एक आर-चार-अनुक्रम एक दायां कोष्ठक )
पीछा छोड़कर आर-चार,
” स्रोत वर्ण सेट के किसी भी सदस्य है, जिनमें से प्रत्येक के एक दृश्य के रूप में परिभाषित किया गया है प्रारंभिक डी-चार-अनुक्रम द्वारा है (जो खाली हो सकता है) एक दोहरे उद्धरण के बाद [ऊपर aha
की तरह] "
अनिवार्य रूप से उपर्युक्त मतलब है कि न केवल आप कच्चे तारों में सीधे भागने का उपयोग नहीं कर सकते हैं (जो कि बिंदु है, यह सकारात्मक है, नकारात्मक नहीं है), आप सीधे यूनिकोड चरित्र विनिर्देशों का उपयोग नहीं कर सकते हैं।
यहाँ कैसे परोक्ष रूप से यह करना है:
#include <iostream>
using namespace std;
auto main() -> int
{
cout << "Ordinary string with a '\u0042' character.\n";
cout << R"(Raw string without a '\u0042' character, and no \n either.)" "\n";
cout << R"(Raw string without a '\u0042' character, i.e. no ')" "\u0042" R"(' character.)" "\n";
}
आउटपुट:
Ordinary string with a 'B' character.
Raw string without a '\u0042' character, and no \n either.
Raw string without a '\u0042' character, i.e. no 'B' character.