c ++中的* const * a是什么意思

时间:2013-05-01 16:25:29

标签: c++ const

我在试图找出以下2行的含义时遇到阻塞问题。以下是gsoap声明的方法声明,我对如何定义finstion的参数感到困惑

SOAP_FMAC3 void SOAP_FMAC4 **soap_serialize_PointerTomss__MobileUserType**(struct soap *soap, mss__MobileUserType *const*a)

所以我正在尝试关注,但无法弄清楚这里的错误是什么。

 mss__MobileUserType const *mobile_user_type = setupMobileUsertype();  
**soap_serialize_PointerTomss__MobileUserType**(soap , &mobile_user_type);

我在这里做错了什么。

4 个答案:

答案 0 :(得分:5)

Type *const* a;

apointerconst pointerType

C ++ const限定符适用于剩下的内容,如果左侧有内容,则适用于右侧的内容

更简单地考虑一下。

int a;
int* const p = &a;    // (1)
int** pp = &p;        // (2)   This is not possible since `p` is `const` pointer.
int* const *ppc = &p; // (3)   This is your case.

mss__MobileUserType* const mobile_user_type = setupMobileUsertype();  // (1)
mss__MobileUserType* const *mobile_user_type_p = &mobile_user_type;   // (3)

soap_serialize_PointerTomss__MobileUserType(soap , mobile_user_type_p);

阅读HEREHERE了解有关const正确性的更多信息。

答案 1 :(得分:1)

您正在调用的函数需要一个指向const指针的指针 到(非常)mss__MobileUserType。表达方式 &mobile_user_type是指向const的(非const)指针的指针 mss__MobileUserType。之间没有隐式转换 他们俩。 (有一个指向const指针的指针也很奇怪 非const,但我不知道库,所以也许有 一个原因。并且具有符号也是未定义的行为 两个连续的下划线。)

答案 2 :(得分:0)

假设您的声明是:

SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTomss__MobileUserType(struct soap *soap, mss__MobileUserType *const *a);

然后你需要传递一个const指针的地址:

mss__MobileUserType *const mobile_user_type = setupMobileUsertype();  
soap_serialize_PointerTomss__MobileUserType(soap , &mobile_user_type);

答案 3 :(得分:0)

声明可以以可能的cv-qualfied类型说明符开头,例如:

X
const X
X const

然后可以跟随零个更多的ptr声明符,如:

*
* const

每个指定指向前一个类型的指针。 ptr声明符中的const适用于指针,而不适用于类型:

例如:

const X*
X const*
X* const
X const * const
X const **const***

让我们分解:

const X ** const*

这是:

const X - const X
*       - pointer to previous
* const - const pointer to previous
*       - pointer to previous

所以它是“指向指向const X的指针的指针”