为什么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
方法调用它.
我有一个A
带有虚拟析构函数的基类。A
具有后代B
,C
并且使用默认析构函数。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) 假设我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 …
我试图在这里使用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源渲染棋盘.
我很好奇 Perl 正则表达式反向引用和其他人的(C++、grep、emacs,实际上我见过的所有其他用法)之间的语法差异的历史原因。
Perl\g1
用于组反向引用。其他人都使用看起来更简洁的语法,只是\1
.
c++ ×3
c++11 ×1
const ×1
const-cast ×1
containers ×1
html ×1
javascript ×1
perl ×1
reference ×1
regex ×1
stl ×1