哪些更正确且使用更广泛?实际问题是最后一个,我认为行为会发生变化。
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?
如果你能指出你是否知道这个主题中的任何视觉“歧视”,我也很高兴。
答案 0 :(得分: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?
答案 1 :(得分:1)
首先,除了分隔符号的程度外,空格在技术上并不重要。
也就是说,通过分析现有的声明,你不会试图理解事物。
您应该从构建声明开始。
在这些结构中,将const
放在适用的任何内容之后。
不幸的是,C语言的一般概念是用C ++表示的。因此,如果表达式*p
应该产生int
,则p
的声明将为int *p
。现在让我们说,表达式*p
应该产生int const
,然后声明将是int const *p
。
在C ++中,重点是类型,因此C ++程序员可能会将其写为
int const* p;
将类型事物与声明的内容的名称分开。
但请记住,空间无关紧要技术上。
通过这种从预期用法的外观构造声明的方式,您可以轻松地使用C ++编译器来测试您的声明是否有效,它是否可以编译。
答案 2 :(得分: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 *
的引用,我们无法更改指针本身 - 因此无需通过引用传递它。
答案 3 :(得分:0)
int *x
和int &x
被认为更好。为什么?
int* x, y
似乎是两个指向int的指针,但这是一个指针和一个int。
int *x, *y
语法更好一点 - 你可以更好地看到这些是两个指针。
我知道我没有涵盖你问题的第二部分;)