我认为' __ box':VS 2015编译器中不推荐使用标识符。有什么替代方案?
#using <mscorlib.dll>
using namespace System;
using System::Collections::Stack;
int main() {
Stack* pS = new Stack();
Int32 i = 5;
pS->Push( __box(i) );
}
答案 0 :(得分:1)
现在有implicit boxing。
Visual C ++编译器现在将值类型设置为Object。这是 可能因为编译器定义的转换转换值 对象的类型。装箱和拆箱可以处理值类型 作为对象。值类型,包括结构类型和内置 诸如int之类的类型可以与Object类型进行转换。编译器选项:/ clr
来自here的代码:
// clr_implicit_boxing_Std_conversion.cpp
// compile with: /clr
int f3(int ^ i) { // requires boxing
return 1;
}
int f3(char c) { // no boxing required, standard conversion
return 2;
}
int main() {
int i = 5;
System::Console::WriteLine(f3(i));
}
答案 1 :(得分:1)
在Visual Studio 2015中删除了对/clr:oldsyntax
的支持(自Visual Studio 2005以来,旧语法已被弃用)。见"Compiler Switch Deprecation/Removal Changes in Visual Studio '14'."
旧语法托管C ++源代码必须移植到C ++ / CLI。如,
Stack^ pS = gcnew Stack();
Int32 i = 5;
pS->Push(i);