String 常量字符串与方法调用中的字符串

String 常量字符串与方法调用中的字符串,string,visual-c++,c++-cli,constants,String,Visual C++,C++ Cli,Constants,在尝试学习C++/CLI Microsoft Windows UI应用程序时,我被一个错误弄糊涂了 我已将MyForm的一个类成员定义为 const String ^ SAMPLE_TEXT = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent et nunc at erat commodo placerat."; 在方法上, System::Void MyForm_Paint(System::Object^

在尝试学习C++/CLI Microsoft Windows UI应用程序时,我被一个错误弄糊涂了

我已将
MyForm
的一个类成员定义为

const String ^ SAMPLE_TEXT = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent et nunc at erat commodo placerat.";
在方法上,

System::Void MyForm_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e)
当函数

e->Graphics->DrawString(示例文本、字体、blackBrush、*rect)

调用,错误是

错误C2664:'void System::Drawing::Graphics::DrawString(System::String^,System::Drawing::Font^,System::Drawing::Brush^,System::Drawing::RectangleF,System::Drawing::StringFormat^'):无法将参数1从'const System::String^'转换为'System::String^'

我很惊讶
DrawString
不会接受
常量字符串。也就是说,我希望
字符串
内容保持不变,而不管指针本身是可变的。据我所知,限定符
const
适用于其右边的任何东西

如果我在
SAMPLE\u TEXT
的定义中省略
const
,程序将编译并运行。而且写成,

String ^ const SAMPLE_TEXT = "Lorem ipsum dolor...";
将编译并运行。然而,我理解这意味着指向文本的常量指针可以更改,而不是我想要的

这一切都是在Visual Studio 2015中完成的


我不能指定一个<代码>字符串< /代码>,它的内容不能由程序改变,是否有一个函数使用它?< /p> const关键字仅指C语言和C++语言中的某个东西,在CLR上运行的其他语言(如C,VB.NET,F等)没有等价的。CLR无法强制执行它,.NET Framework在其方法声明中不使用const。Graphics::DrawString()不会,从错误消息中可以看出。据C++/CLI编译器所知,该方法可能会更改字符串内容。它抱怨道。所以你不能用它。没有丢失任何内容,System::String已按约定是不可变的。Hans,谢谢。我从来没有想过,

const
不会继续下去。根据你的回答,我在另一个方向做了一些挖掘,发现C++/CLI使用了
literal
,这与我所想的意思大致相当于
static const