Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Windows futtatókörnyezet és a közös nyelvi futtatókörnyezet sztringeket jelöl olyan objektumokként, amelyek lefoglalt memóriáját automatikusan kezeli a rendszer. Vagyis nem kell explicit módon elvetnie a sztring memóriáját, ha a sztringváltozó kiesik a hatókörből, vagy az alkalmazás véget ér. Ha azt szeretné jelezni, hogy egy sztringobjektum élettartama automatikusan kezelhető, deklarálja a sztringtípust a leíró-objektum (^) módosítóval.
Windows-futtatókörnyezet
A Windows futtatókörnyezet architektúrájához az String adattípusnak a Platform névtérben kell lennie. Az Ön kényelme érdekében a Visual C++ a string névtér szinonimájaként Platform::Stringdefault szolgáló adattípust is biztosítja.
Szemantika
// compile with /ZW
using namespace Platform;
using namespace default;
Platform::String^ MyString1 = "The quick brown fox";
String^ MyString2 = "jumped over the lazy dog.";
String^ MyString3 = "Hello, world!";
Követelmények
Fordítási lehetőség: /ZW
Common Language Runtime (Közös Nyelvi Futásidő)
A fordításkor /clra fordító a sztringkonstansokat típussztringekké Stringalakítja. A meglévő kóddal való visszamenőleges kompatibilitás megőrzése érdekében ez alól két kivétel van:
Kivételkezelés. A sztringkonstans eldobásakor a fordító sztringkonstansként fogja fel.
Sablonlevonás. Ha egy sztringkonstanst sablonargumentumként ad át, a fordító nem konvertálja azt String. Vegye figyelembe, hogy az általános argumentumként átadott sztringkonstansok elő lesznek léptetve a következőre String: .
A fordító emellett három operátor beépített támogatását is támogatja, amelyeket felülbírálhat a viselkedésük testreszabásához:
System::String^ operátor +( System::String, System::String);
System::String^ operátor +( System::Object, System::String);
System::String^ operátor +( System::String, System::Object);
Ha átad egy parancsot String, a fordító szükség esetén be lesz jelölve, majd összefűzi az objektumot (ToStringgel) a sztringgel.
Megjegyzés:
A caret ("^") azt jelzi, hogy a deklarált változó egy C++/CLI által felügyelt objektum leírója.
További információ: Sztring és karakterkonstansok.
Követelmények
Fordítási lehetőség: /clr
Példák
Az alábbi példakód a sztringek összefűzését és összehasonlítását mutatja be.
// string_operators.cpp
// compile with: /clr
// In the following code, the caret ("^") indicates that the
// declared variable is a handle to a C++/CLI managed object.
using namespace System;
int main() {
String^ a = gcnew String("abc");
String^ b = "def"; // same as gcnew form
Object^ c = gcnew String("ghi");
char d[100] = "abc";
// variables of System::String returning a System::String
Console::WriteLine(a + b);
Console::WriteLine(a + c);
Console::WriteLine(c + a);
// accessing a character in the string
Console::WriteLine(a[2]);
// concatenation of three System::Strings
Console::WriteLine(a + b + c);
// concatenation of a System::String and string literal
Console::WriteLine(a + "zzz");
// you can append to a System::String^
Console::WriteLine(a + 1);
Console::WriteLine(a + 'a');
Console::WriteLine(a + 3.1);
// test System::String^ for equality
a += b;
Console::WriteLine(a);
a = b;
if (a == b)
Console::WriteLine("a and b are equal");
a = "abc";
if (a != b)
Console::WriteLine("a and b are not equal");
// System::String^ and tracking reference
String^% rstr1 = a;
Console::WriteLine(rstr1);
// testing an empty System::String^
String^ n;
if (n == nullptr)
Console::WriteLine("n is empty");
}
abcdef
abcghi
ghiabc
c
abcdefghi
abczzz
abc1
abc97
abc3.1
abcdef
a and b are equal
a and b are not equal
abc
n is empty
Az alábbi minta azt mutatja, hogy túlterhelheti a fordító által biztosított operátorokat, és hogy a fordító a típus alapján String túlterhelt függvényt fog találni.
// string_operators_2.cpp
// compile with: /clr
using namespace System;
// a string^ overload will be favored when calling with a String
void Test_Overload(const char * a) {
Console::WriteLine("const char * a");
}
void Test_Overload(String^ a) {
Console::WriteLine("String^ a");
}
// overload will be called instead of compiler defined operator
String^ operator +(String^ a, String^ b) {
return ("overloaded +(String^ a, String^ b)");
}
// overload will be called instead of compiler defined operator
String^ operator +(Object^ a, String^ b) {
return ("overloaded +(Object^ a, String^ b)");
}
// overload will be called instead of compiler defined operator
String^ operator +(String^ a, Object^ b) {
return ("overloaded +(String^ a, Object^ b)");
}
int main() {
String^ a = gcnew String("abc");
String^ b = "def"; // same as gcnew form
Object^ c = gcnew String("ghi");
char d[100] = "abc";
Console::WriteLine(a + b);
Console::WriteLine(a + c);
Console::WriteLine(c + a);
Test_Overload("hello");
Test_Overload(d);
}
overloaded +(String^ a, String^ b)
overloaded +(String^ a, Object^ b)
overloaded +(Object^ a, String^ b)
String^ a
const char * a
Az alábbi minta azt mutatja, hogy a fordító megkülönbözteti a natív sztringeket és String a sztringeket.
// string_operators_3.cpp
// compile with: /clr
using namespace System;
int func() {
throw "simple string"; // const char *
}
int func2() {
throw "string" + "string"; // returns System::String
}
template<typename T>
void func3(T t) {
Console::WriteLine(T::typeid);
}
int main() {
try {
func();
}
catch(char * e) {
Console::WriteLine("char *");
}
try {
func2();
}
catch(String^ str) {
Console::WriteLine("String^ str");
}
func3("string"); // const char *
func3("string" + "string"); // returns System::String
}
char *
String^ str
System.SByte*
System.String
Lásd még
Komponensbővítmények .NET-hez és UWP-hez
Sztring és karakterkonstansok
/clr (Common Language Runtime Compilation)