-1

哪一个更正确,使用更广泛?实际问题是最后一个问题,我认为行为发生了变化。

int *test; //for this, it is probably both?
int* test;


int& test;
int &test;

实际问题:

const int test;
int const test;


const int* test;
int* const test; //<-- I guess this also have a different meaning if I consider the last one?


const int& test;
int const& test; //also, considering last one, any difference?


const int*& test;
int* const& test; //<-- this is the correct one for stating "I won't modify the passed object, but I may modify the one pointed"? I have had problems with the other one sometimes, does the other one has some other meaning?
const int* const& test; //<-- another meaning?

如果您能指出您是否知道该主题中的任何视觉“歧义” ,我也会很高兴。

4

4 回答 4

2

除了这些之外,您的所有示例都为每一行提供了相同的语义:

//test is a pointer to a const int.
//test may be modified, but the int
//that it points to may not (through this
//access path).
const int* test;

//test is a const pointer to int.
//test may not be modified, but the
//int that it points to may.
int* const test;



//test is a reference to a pointer to a const int.
//The referenced pointer may be modified, but
//the int that that pointer points to may not be.
const int*& test;
//test is a reference to a const pointer to 
//int. The referenced pointer may not be modified
//but the int may be.
int* const& test; //<-- this is the correct one for stating
                  //    "I won't modify the passed object,
                  //     but I may modify the one pointed"?
                  //       Yes
                  //    I have had problems with the other one sometimes,
                  //    does the other one has some other meaning?
                  //       Yes
//test is a reference to a const pointer to const int.
//The referenced pointer may not be modified, nor may
//the int that it points to.
const int* const& test; //<-- another meaning?
于 2013-03-10T21:19:58.390 回答
1

首先,空格在技术上无关紧要,除了它分隔符号的程度。

也就是说,您不会通过分析现有声明来尝试理解事物。

您应该从构造声明开始。

在这些结构中,放置const在它适用的任何地方之后。

不幸的是,C 的一般思想保留在 C++ 中,声明就像用法一样。所以,比如说,表达式*p应该产生一个int,那么 的声明p就是int *p。现在假设表达式*p应该产生一个int const,那么声明将是int const *p

在 C++ 中,重点是类型,因此 C++ 程序员可能会将其写为

int const* p;

将类型事物与声明的任何名称分开。

但请记住,空间在技术上并不重要。

通过这种从预期用途的外观构造声明的方式,您可以轻松地使用 C++ 编译器来测试您的声明是否有效,它是否可以编译。

于 2013-03-10T21:20:17.080 回答
1

将空间放置在&或周围的位置*(或者实际上,如果一侧或两侧有一个或多个空间)绝对没有区别。的位置const确实有所作为;

const int *test;

意味着什么test指向没有被改变。所以:

int b = 42;
*test = 42;
test = &b;

*test = 42;将是非法的,但将测试分配给新地址是有效的。

int * const test;

意味着test不能改变它的价值,但它所指向的可以:

int b = 42;
*test = 42;
test = &b;

现在test = &b;是无效的。

const int& test;
int const& test; //also, considering last one, any difference?

两者都一样。const 和 int 是&.

这个:

const int*& test;

意味着我们引用了一个int *值不能改变的地方。完全有效,我们可以使用以下内容:

test = &b;

这两个:

int* const& test
const int* const& test;

int *分别是对和的引用const int *,我们不能更改指针本身 - 所以通过引用传递它没有意义。

于 2013-03-10T21:21:49.370 回答
0

int *x并被int &x认为更好。为什么? int* x, y看起来像是两个指向 int 的指针,但这是一个指针和一个 int。 int *x, *y语法稍微好一点 - 你可以更好地看到这是两个指针。

我知道我没有涵盖您问题的第二部分;)

于 2013-03-10T21:25:58.727 回答