1

我无法在任何地方找到答案。问题很简单(?)。假设我有这样的功能:

class Sth {

private:
   long u;
public:
   void set(long u)
   {
    this.u = u;
   }

};

我像这样运行它:

Sth s;
CORBA::Long val = 5;
s.set(val);

我可以这样做吗?一切都会好吗?

4

3 回答 3

2

这应该没问题。根据 IBM 参考资料,IDL long 的范围为-2^31 到 2^31-1,大小至少为 32 位

它应该本机转换为longc++。该标准没有定义大小,但定义了这些值可以容纳的最小范围。这CORBA::Long是一个 typedef long,它可能会在平台之间改变。

于 2012-09-14T13:52:36.600 回答
1

您可以使用int_least32_t(from <stdint.h>, or <cstdint>),它是保证至少 32 位宽的本机类型,并且 typedef'd 为适当的编译器本机类型。

于 2012-09-14T14:08:50.163 回答
1

这取决于您使用的 IDL 到 C++ 映射的实现。在新的 IDL 到 C++11 的映射中,IDL 中的 long 映射到 int32_t。

于 2012-09-15T06:40:23.027 回答