我在WebKit HTML 5 SQL存储笔记演示的源代码中看到以下内容:
function Note() {
var self = this;
var note = document.createElement('div');
note.className = 'note';
note.addEventListener('mousedown', function(e) { return self.onMouseDown(e) }, false);
note.addEventListener('click', function() { return self.onNoteClick() }, false);
this.note = note;
// ...
}
Run Code Online (Sandbox Code Playgroud)
笔者采用自我在一些地方(函数体)及本在其他地方(的函数方法的参数列表中定义的机构).这是怎么回事?现在我已经注意到了它,我会在各处开始看到它吗?
我想在页面左侧而不是顶部选项卡.我已经出于其他原因(效果)加载jQuery,所以我更喜欢将jQuery用于另一个UI框架.搜索"垂直制表符jquery"会产生正在进行中的工作的链接.
是否正在使用垂直标签在浏览器中工作,或者它是如此微不足道,一旦你有了解决方案,发布示例代码似乎不值得?
声称使用标准C++容器作为基类是错误的说法让我感到惊讶.
如果没有滥用语言来宣布......
// Example A
typedef std::vector<double> Rates;
typedef std::vector<double> Charges;
Run Code Online (Sandbox Code Playgroud)
......那么确切地说,宣告的危险是什么......
// Example B
class Rates : public std::vector<double> {
// ...
} ;
class Charges: public std::vector<double> {
// ...
} ;
Run Code Online (Sandbox Code Playgroud)
B的积极优势包括:
A的积极优势包括:
这两种方法都优于使用原始容器,因为如果实现从vector <double>更改为vector <float>,那么只有一个地方可以用B更改,也许只有一个地方可以用A更改(可能更多,因为有人可能在多个地方放置了相同的typedef语句.
我的目标是这是一个具体的,可回答的问题,而不是对更好或更差实践的讨论.显示由于从标准容器派生而可能发生的最糟糕的事情,这可以通过使用typedef来防止.
编辑:
毫无疑问,向类Rate或类Charges添加析构函数会有风险,因为std :: vector不会将其析构函数声明为虚拟.示例中没有析构函数,也不需要析构函数.销毁Rates或Charges对象将调用基类析构函数.这里也不需要多态性.挑战在于使用派生而不是使用typedef来表明发生了一些不好的事情.
编辑:
考虑这个用例:
#include <vector>
#include <iostream>
void kill_it(std::vector<double> *victim) {
// user code, knows nothing of Rates or …Run Code Online (Sandbox Code Playgroud) 是否有人使用JIT技巧来提高静态编译语言(如C++)的运行时性能?看起来热点分析和基于运行时期间观察的分支预测可以提高任何代码的性能,但也许有一些基本的战略原因,为什么在运行时进行这样的观察和实现更改只能在虚拟机中实现.我清楚地记得听到C++编译器编写者嘀咕着"你也可以为用C++编写的程序做到这一点",同时听动态语言爱好者谈论收集统计数据和重新安排代码,但我的网络搜索支持这种记忆的证据已经枯竭了.
像我这样的大多数C++程序员在某些方面犯了以下错误:
class C { /*...*/ };
int main() {
C c(); // declares a function c taking no arguments returning a C,
// not, as intended by most, an object c of type C initialized
// using the default constructor.
c.foo(); // compiler complains here.
//...
}
Run Code Online (Sandbox Code Playgroud)
现在虽然错误很明显,一旦你知道它我想知道这种本地函数声明是否有任何明智的用途,除了你可以这样做 - 特别是因为没有办法在同一个函数中定义这样的本地函数块; 你必须在其他地方定义它.
我认为Java风格的本地类是一个非常好的功能,我倾向于经常使用,特别是匿名排序.甚至本地C++类(可以具有内联定义的成员函数)也有一些用处.但是这个没有定义的本地函数声明对我来说似乎很尴尬.它只是一个C-legacy还是有一些我不知道的更深层次的用例?
编辑对于非信徒:C c()是不是一个函数指针声明.
这个计划
int main()
{
void g();
cout << "Hello ";
g();
return 0;
}
void g()
{
cout << …Run Code Online (Sandbox Code Playgroud) 人们用〜/ git做他们所有的开发吗?如果你需要使用dev,test,release和one-off-for-big-client版本,这些是〜/ git,还是可以在他们自己的树中的其他地方?第三方组件在哪里?这对于SO来说太大了(我是否需要阅读一本书),还是可以用ASCII树图来回答?
在2005年11月1日的C++专栏中,Herb Sutter写道......
int A[17];
int* endA = A + 17;
for( int* ptr = A; ptr < endA; ptr += 5 )
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
[O]在某些CPU架构(包括当前的架构)中,上述代码可能导致硬件陷阱发生在创建三个结束指针的位置,无论该指针是否被解除引用.
如何在bitpattern上捕获CPU?关于什么 ...
int A[17];
// (i) hardware will trap this ?
int *pUgly = A + 18;
// (ii) hardware will trap this, too?
int *pEnd = A + 17;
++pEnd;
// (iii) will this fool it?
int *precious = A + 17;
unsigned long tricksy = reinterpret_cast<unsigned long>(precious) ;
++tricksy; …Run Code Online (Sandbox Code Playgroud) 目标:
例:
#include "Base.h"
#include "Derived.h"
{
static Base sb; // OK
Base ab, *hb = new Base; // OK
static Derived sd; // OK
Derived ad; // OK
Derived *pd = &ad; // OK
Derived *hd = new Derived; // Compile error, link error,
// test-unit exception, or lint gripe
struct Composite {
Base cb;
Derived cd;
} *hc = new Composite; // OK
// Edit to show side-effects of solutions which hide Base::operator new. …Run Code Online (Sandbox Code Playgroud) 我想使用命名参数将词法文件句柄传递给子例程,但以下内容不能编译:
#!/usr/bin/perl -w
use strict;
my $log_fh;
my $logname = "my.log";
sub primitive {
my ($fh, $m) = @_;
print $fh $m;
}
sub sophisticated {
my ($args) = @_;
print $args->{m};
print $args->{fh} $args->{m} ;
}
open $log_fh, ">", $logname;
print $log_fh "Today I learned ...\n";
primitive($log_fh,"... the old way works ...\n");
sophisticated({
fh=>$log_fh,
m=>"... and the new way requires an intervention by SO.",
});
close $log_fh;
Run Code Online (Sandbox Code Playgroud)
投诉是:
Scalar found where operator expected at ./lexical.file.handle.pl line 15, near
} …Run Code Online (Sandbox Code Playgroud) 规范的一部分说"有些名字很特别,例如Hughie,Dewey,Louis和Donald.在项目的整个生命周期中,可以随意添加其他名称.每当你输入其中一个名字时,请玩quack.wav."
我可以写......
while (<>) {
if ($_ =~ /Hughie|Dewey|Louis/) {
quack() ;
}
elsif ($_ =~ /Donald/ {
quack() ;
you_re_fired_apprentice() ; # Easter egg don't tell QA
}
}
Run Code Online (Sandbox Code Playgroud)
...但是虽然要实施,但它看起来是WTF-y:二进制搜索在哪里?如果鸭子名字的数量突然大幅增加怎么办?它根本不会扩展!
我可以在临时目录中使用这些名称创建空文件,然后使用"文件存在"API,但这看起来很迂回,我必须确保它们最后被删除.
当然有更好的方法吗?
c++ ×5
javascript ×2
perl ×2
closures ×1
definition ×1
dvcs ×1
function ×1
git ×1
hash ×1
inheritance ×1
jit ×1
jquery ×1
jquery-ui ×1
list ×1
local ×1
optimization ×1
performance ×1
scope ×1
stl ×1
subroutine ×1