相关疑难解决方法(0)

在类型ID可接受的C++中是"const"吗?

我的同事是0 2上的问题,他一直激励着(1,2),所以我想我应该给他一个机会,迎头赶上.

我们最近的分歧是关于将"const"放在声明上的样式问题.

他认为它应该在类型前面,或者在指针之后.原因在于,这是其他人通常所做的事情,其他风格可能会让人感到困惑.因此,指向常量int的指针和指向int的常量指针将分别为:

const int *i;
      int * const i;
Run Code Online (Sandbox Code Playgroud)

但是,无论如何我很困惑.我需要的是一致的,易于理解的规则,我可以做的"常量"意义上的唯一方法是,它去后,它被修改的事情.有一个例外允许它在最终类型前面,但这是一个例外,所以如果我不使用它,它会更容易.

因此,指向常量int的指针和指向int的常量指针将分别为:

int const * i;
int * const i;
Run Code Online (Sandbox Code Playgroud)

作为一个额外的好处,以这种方式做事使得更深层次的间接更容易理解.例如,指向int的常量指针的指针显然是:

int * const * i;
Run Code Online (Sandbox Code Playgroud)

我的论点是,如果有人只是按照自己的方式学习,他们就可以轻松搞清楚上面的内容.

这里的最终问题是他认为将int放在int之后是如此难以言喻的丑陋,对可读性有害,以至于它应该在样式指南中被禁止.当然,我认为如果指南应该建议按照我的方式做,但无论哪种方式,我们都不应该禁止一种方法.

编辑: 我已经得到了很多好的答案,但没有一个真正直接解决我的最后一段("最终问题").很多人都争论一致性,但在这种情况下是如此理想,禁止其他方式这样做是一个好主意,而不是仅仅劝阻它?

c++ coding-style

25
推荐指数
7
解决办法
7939
查看次数

模板如何工作才能使编译器正确生成类以同时使用指针类型和非指针类型?

给定

int i = 42;
int* p = &i;
Run Code Online (Sandbox Code Playgroud)

我们做不到

const int * & d = p;
Run Code Online (Sandbox Code Playgroud)

在我目前的理解中,这是因为const int * & d可以读作“d是一个指向 an 的指针的引用int,它是一个const”,并且p是“指向 an 的指针int”,这意味着 RHS 需要变成一个临时的“指向 an 的指针”。 anint是一个const" 并且不能直接与引用绑定(如在 LHS 上)。我们需要有,比如说,const int* const& d = p;。可能的参考文献1、2

也就是说,请考虑以下玩具代码:

template<typename T>
class X
{
public:
    void fun(const T& d) {  }
};
Run Code Online (Sandbox Code Playgroud)

起初我想如果我这样做

X<int*> x;
x.fun(p); …
Run Code Online (Sandbox Code Playgroud)

c++ templates pointers constants

4
推荐指数
1
解决办法
141
查看次数

const double和double const有什么区别?

我在一个流行的C ++博客中遇到了以下代码:

double const x = 1.0;
Run Code Online (Sandbox Code Playgroud)

我知道这一点const double*double* const不同之处在于前者的值是const,而其他的指针是const。但是double const和之间有什么区别const double

c++

2
推荐指数
1
解决办法
1万
查看次数

为什么这个指向常量指针的指针非法?

int x = 10;
int * const p = &x;
const int **p1 = &p;
Run Code Online (Sandbox Code Playgroud)

难以理解为什么这是非法的.

编辑

谢谢你所有的好答案.以下是我对答案的解释,随意不同意.所以,错误在第3行.它意味着原始整数是常量但并不意味着它指向的指针是常量,因此它是非法的,因为我们可以尝试将指针"p"改变为"p1",这是不可能的,因为这是一个常量指针.所以要解决这个问题,第三行必须是:

int * const *p1 = &p;
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为它表示虽然原始整数是非常量(可变),但它指向的指针是常量,因此它是一个合法的陈述.所以这也是合法的:

const int * const *p1 = &p;
Run Code Online (Sandbox Code Playgroud)

这说同样的事情,除了它还说你不能改变原始整数,因为它是不变的.

c++ pointers const

2
推荐指数
1
解决办法
159
查看次数

当作为参数传递给c ++中的函数时,const string&str和string const&str之间有什么区别?

我在函数参数中使用pass引用传递给const字符串,如下所示:

class Super
{
   void alignment(const string & str);
};

void Super::alignment(const string & str)
{
  //do some stuff
}
Run Code Online (Sandbox Code Playgroud)

现在如果我使用如下,它会得到相同的结果:

void Super::alignment(string const & str)
{
  //do some stuff
}
Run Code Online (Sandbox Code Playgroud)

这两种c ++定义有什么区别?

c++ const parameter-passing string-constant

1
推荐指数
1
解决办法
316
查看次数

C中"int const*"的确切含义是什么?

可能重复:
const int = int const?
C中的Const

我想知道C中"int const*"的确切含义,以及嵌入式编程系统中"const int*"和"int const*"之间的小比较.

__kanu

c

0
推荐指数
1
解决办法
3463
查看次数

我无法确定为什么这个C程序给了我这个答案

无法知道为什么输出是6?在给定的C程序中,我每次输出为6,所以我不能说它是打印Garbage值

#include<stdio.h>
void main()
{
    int const* a=2; 
    printf("%d\n",++(a));
}
Run Code Online (Sandbox Code Playgroud)

我无法确定为什么这个C程序给了我这个答案.

c pointers const

0
推荐指数
1
解决办法
172
查看次数

为什么打印的价值是25?不应该是内存位置值?

我正在使用c谜题,并遇到了这个问题.在这里,一个at printf语句指针增加一次,所以我认为它将指向随机数!但我不明白为什么25是输出?谁有人可以帮我理解?提前谢谢了;)

void main()

{

      int  const * p=5;

      printf("%d",++(*p));

}
Run Code Online (Sandbox Code Playgroud)

答案:25

c

-4
推荐指数
1
解决办法
164
查看次数