【发布时间】:2014-04-02 07:06:11
【问题描述】:
我观察到 System.Contains() Method! 在 C# 和 C++/CLI 中的不同行为!
让我们看一下 C# 示例,
string s1 = "The quick brown fox jumps over the lazy dog";
string s2 = "fox";
bool b;
b = s1.Contains(s2)
由于我认为不应该更改 s2,所以我将其设为 const string s2 = "fox"; 的常量,并且程序运行没有任何问题。
现在转向 C++/CLI 示例,
String^ s1 = "The quick brown fox jumps over the lazy dog";
String^ s2 = "fox";
bool b;
b = s1->Contains( s2 );
当我将 s2 转为 const String^ s2 = "fox"; 时,编译返回错误 C2664 - 无法将参数 1 从 const System::String ^ 转换为 System::String ^!
我知道在 C# 中,三个重载函数之一是bool string.Contains(string value)。它接受一个常量输入作为函数参数。然而在 C++/CLI 中,函数是 bool System::String::Contains(System::String ^ value)。这两个函数在我看来都一样,但第二个函数却出乎我的意料。
这是为什么呢?如何在 C++/CLI 中将常量传递给 Contains()?我经常使用 C++ 和 C# 进行编程,但对 C++/CLI 来说是新手。
谢谢。
【问题讨论】:
-
您在传递参数时是否尝试过类型转换为
System::String ^?
标签: c# .net c++-cli parameter-passing constants