小编Tho*_*day的帖子

这个JavaScript成语的基础是:var self = this?

我在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)

笔者采用自我在一些地方(函数体)及在其他地方(的函数方法的参数列表中定义的机构).这是怎么回事?现在我已经注意到了它,我会在各处开始看到它吗?

javascript closures scope

353
推荐指数
8
解决办法
15万
查看次数

使用JQuery的垂直制表符?

我想在页面左侧而不是顶部选项卡.我已经出于其他原因(效果)加载jQuery,所以我更喜欢将jQuery用于另一个UI框架.搜索"垂直制表符jquery"会产生正在进行中的工作的链接.

是否正在使用垂直标签在浏览器中工作,或者它是如此微不足道,一旦你有了解决方案,发布示例代码似乎不值得?

javascript jquery jquery-ui

80
推荐指数
4
解决办法
13万
查看次数

从C++ STL容器中获取是否存在任何真正的风险?

声称使用标准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的积极优势包括:

  • 启用函数重载,因为f(Rates&)和f(Charges&)是不同的签名
  • 允许其他模板专用,因为X <Rates>和X <Charges>是不同的类型
  • 前瞻性声明是微不足道的
  • 调试器可能会告诉您对象是费率还是费用
  • 如果随着时间的推移,费率和费用会产生个性 - 一个单一的费率,费用的输出格式 - 这个功能有明显的实施范围.

A的积极优势包括:

  • 不必提供构造函数等的简单实现
  • 十五年前的预标准编译器是唯一能够编译遗产的编译器
  • 由于专业化是不可能的,模板X <费率>和模板X <费用>将使用相同的代码,因此没有毫无意义的膨胀.

这两种方法都优于使用原始容器,因为如果实现从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)

c++ inheritance stl

30
推荐指数
4
解决办法
7985
查看次数

静态语言的运行时优化:JIT for C++?

是否有人使用JIT技巧来提高静态编译语言(如C++)的运行时性能?看起来热点分析和基于运行时期间观察的分支预测可以提高任何代码的性能,但也许有一些基本的战略原因,为什么在运行时进行这样的观察和实现更改只能在虚拟机中实现.我清楚地记得听到C++编译器编写者嘀咕着"你也可以为用C++编写的程序做到这一点",同时听动态语言爱好者谈论收集统计数据和重新安排代码,但我的网络搜索支持这种记忆的证据已经枯竭了.

c++ optimization performance jit

21
推荐指数
5
解决办法
8456
查看次数

本地函数声明有用吗?

像我这样的大多数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)

c++ function local definition

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

什么目录结构对DVCS有意义,比如git?

我习惯的:

  • 服务器上的档案(NY,IN,NC)
  • 在我的开发机器上:
    • 一个名为〜/ work的目录
    • 名为〜/ work/NY/devproject,〜/ work/NC/project等的子目录
    • 名称为〜/ work/NY/release/1.3/project,〜/ work/NY/test/1.3b/project等的子目录不经常出现
    • 有时名为〜/ proxy/NY,〜/ proxy/NC等的目录包含档案的一次性本地缓存,以减少读取的网络流量.可以随时删除这些目录.
  • 一个临时构建,删除〜/ work/...并从归档中重新填充它

但是DVCS没有意义

  • 存档位于我的开发计算机上,但由于备份原因,近端克隆位于远程计算机上.
  • 进行临时构建意味着删除并重新拉动整个存档,这看起来很昂贵.
  • 看起来我有名为〜/ git/git.git/git的目录,这是很多gits.

人们用〜/ git做他们所有的开发吗?如果你需要使用dev,test,release和one-off-for-big-client版本,这些是〜/ git,还是可以在他们自己的树中的其他地方?第三方组件在哪里?这对于SO来说太大了(我是否需要阅读一本书),还是可以用ASCII树图来回答?

git dvcs

11
推荐指数
2
解决办法
3494
查看次数

即使指针从未被解除引用,如何在三个过去的指针中发生硬件陷阱?

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)

c++ cpu-architecture pointer-arithmetic hardware-traps

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

C++ Puzzle:防止派生类的堆分配,允许自动和静态

目标:

  1. Base类的对象可以是静态的,自动的,直接在堆上分配,并参与任何地方分配的复合对象
  2. 对于任何具有Base作为可访问祖先的Derived类,对象可以是静态的或自动的并参与复合,但可能不会直接在堆上分配

例:

#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)

c++

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

Perl:如何将子例程的词法文件句柄作为命名参数传递和使用?

我想使用命名参数将词法文件句柄传递给子例程,但以下内容不能编译:

#!/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)

perl subroutine

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

在Perl中确定字符串变量是否与列表中的字符串匹配的惯用方法是什么?

规范的一部分说"有些名字很特别,例如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,但这看起来很迂回,我必须确保它们最后被删除.

当然有更好的方法吗?

perl hash list

7
推荐指数
3
解决办法
236
查看次数