小编kdo*_*dog的帖子

为什么const方法不能返回非const引用?

为什么getRanks()下面的方法不能编译,我怎样才能优雅地修复它?

我想做的就是定义一个成员访问器方法,该方法返回对成员的引用.引用不是const因为我可能会修改它后面引用的内容.但由于成员方法不修改对象,我声明它const.然后编译器(clang,std = c ++ 11)坚持存在"删除限定符"的"引用绑定".但是我不会放弃预选赛,是吗?如果我是,为什么:

struct teststruct{
  vector<int> ranks;
  vector<int>& getRanks()const{
    return ranks;
  }
};
Run Code Online (Sandbox Code Playgroud)

现在,代码编译,如果我更改return语句抛弃const:

return const_cast<vector<int>&>(ranks);
Run Code Online (Sandbox Code Playgroud)

但是"排名"首先不应该是const,我不明白为什么我需要const_cast the const.我甚至不知道这样做是否安全.

无论如何,是否有更清洁的人来编写这种方法?有人可以解释为什么这种简单的常识方法失败了吗?我想声明getRanks()方法" const",以便我可以从其他const方法调用它.

c++ const reference const-cast c++11

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

具有虚拟析构函数的基类的子类中的默认析构函数

我有一个A带有虚拟析构函数的基类。A具有后代BC并且使用默认析构函数。C通过指针删除的对象是否安全A

更具体地说,请考虑以下示例代码:

class A {
 public:
      A(){};
      virtual ~A() {/* code here */};
 };
 class B: public A {
      B() {/* code....*/};
      /* NO DESTRUCTOR SPECIFIED */
   };
 class C: public B {/*same as above, no destructor */};
 class D: public B {/* same as above, no destructor*/}
Run Code Online (Sandbox Code Playgroud)

要运行的代码如下所示:

A* getAPointer(void); /* a function returning a C or a D*/
A* aptr=getAPointer();
/* aptr is declared as A*, …
Run Code Online (Sandbox Code Playgroud)

c++ virtual-destructor

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

C++中POD类的快速默认排序

假设我struct Foo在C++中有一些POD ,我想将它放入一个有序的容器中set<Foo>.我不关心使用哪种排序,只关注它是否一致且快速.做这个的最好方式是什么?

更具体地说,我说我在64位机器上sizeof(long)==8.说课程是:

 struct Foo{
  long key; //8 bytes : 8 total
  int fum;  // 4 bytes : 12 total
  short n;  // 2 bytes : 14 total
  short n[3];  //6 bytes : 20 total
  char bar[5];  // 5 bytes : 25 total
  char name[23]; //22 bytes : 47 total
  char padding[1]; // 1 byte : 48 total 
 }
Run Code Online (Sandbox Code Playgroud)

padding字段只是为了确保大小为8的倍数.

请注意,它sizeof(Foo)是48,因此其内容可以用6 unsigned long秒表示,这显然是进行比较的最佳方式,而不是遍历每个字段.

编译器可以自动为我执行此操作吗?还是我必须要么定义union一个字段unsigned long …

c++ containers stl comparison-operators

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

我如何使用chessboard.js,一个javascript棋盘?

我试图在这里使用javascript棋盘:http://chessboardjs.com/.不幸的是,我不知道javascript或CSS,并且在HTML中生锈,所以我不理解文档,即使这似乎是一个标准的javascript棋盘.

如何安装和使用此包以呈现棋盘?"示例"都是HTML或javascript的片段,对我来说没有用,没有嵌入到工作网页中.当复制到我的主目录时,示例网页的源不起作用.例如,网页http://chessboardjs.com/examples/1000在这里声称要渲染和清空电路板,并在他们的服务器上执行,但是当我将源复制到我的本地目录时,只有一个空白页面呈现.无论如何,该页面的来源对我来说没有意义,例如,它引用文件"js/chessboard.js"和"js/json3.min.js",这两个文件都不在分发中.(当"chessboard.js"被分发中的javascript文件的名称替换时,渲染也不起作用).

我认为该问题与搜索img文件的位置以及存储文件的位置有关.并且可能这些对于javascript专家来说是如此明显,以至于它都隐含在这个包中,并且在文档中没有解释过.

所以,我想要的是一个文件foo.html,当复制到我的本地机器时,将使用chessboard.js源渲染棋盘.

html javascript chessboard.js

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

为什么 perl 使用 \g1 作为反向引用而其他人使用 \1?

我很好奇 Perl 正则表达式反向引用和其他人的(C++、grep、emacs,实际上我见过的所有其他用法)之间的语法差异的历史原因。

Perl\g1用于组反向引用。其他人都使用看起来更简洁的语法,只是\1.

regex perl

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