相关疑难解决方法(0)

C++ SFINAE的例子?

我想进入更多的模板元编程.我知道SFINAE代表"替换失败不是错误".但是有人能告诉我SFINAE的用处吗?

c++ templates metaprogramming sfinae

113
推荐指数
6
解决办法
4万
查看次数

为什么要保守地使用例外?

我经常看到/听到人们说异常应该很少使用,但永远不解释原因.虽然这可能是真的,但理由通常是一种愚蠢:"它被称为例外的原因",对我来说,这似乎是一种不应被一位受人尊敬的程序员/工程师接受的解释.

可以使用异常来解决一系列问题.为什么将它们用于控制流程是不明智的?对它们的使用方式保持格外保守的理念是什么?语义?性能?复杂?美学?惯例?

我之前已经看过一些关于性能的分析,但是在与某些系统相关且与其他系统无关的水平上.

同样,我不一定不同意他们应该在特殊情况下得救,但我想知道共识的理由是什么(如果这样的事情存在的话).

c++ exception

78
推荐指数
13
解决办法
9479
查看次数

我在哪里使用JavaScript中的按位运算符?

我读过"什么是按位运算符?" ,所以我知道运算符什么 ,但我还不清楚如何使用它们.任何人都可以提供任何实际的例子,说明位运算符在JavaScript中有用吗?

谢谢.

编辑:

只是深入研究jQuery源代码,我发现了几个使用按位运算符的地方,例如:(只有&运算符)

// Line 2756:
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));

// Line 2101
var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
Run Code Online (Sandbox Code Playgroud)

javascript bitwise-operators

69
推荐指数
9
解决办法
3万
查看次数

C#?:条件运算符

我有这个C#2.0源代码的摘录:

object valueFromDatabase;
decimal result;
valueFromDatabase = DBNull.Value;

result = (decimal)(valueFromDatabase != DBNull.Value ? valueFromDatabase : 0);
result = (valueFromDatabase != DBNull.Value ? (decimal)valueFromDatabase : (decimal)0);
Run Code Online (Sandbox Code Playgroud)

第一个结果评估抛出,InvalidCastException而第二个结果评估不抛出.这两者有什么区别?

.net c# conditional-operator c#-2.0

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

在C#中将内容转换为枚举

在C#中有一些我无法理解的东西.您可以将超出范围int转换为a enum,编译器不会退缩.想象一下enum:

enum Colour
{
    Red = 1,
    Green = 2,
    Blue = 3
}
Run Code Online (Sandbox Code Playgroud)

现在,如果你写:

Colour eco;
eco = (Colour)17;
Run Code Online (Sandbox Code Playgroud)

编译器认为没问题.还有运行时.呃?

为什么C#团队决定实现这一目标?我认为,在这样的场景中,这个决定忽略了使用枚举的重点:

void DoSomethingWithColour(Colour eco)
{
    //do something to eco.
}
Run Code Online (Sandbox Code Playgroud)

在像C#这样的强类型语言中,我想假设它eco总是具有合法Colour价值.但这种情况并非如此.程序员可以调用我的方法,其值为17 eco(如前面的代码片段所示),因此我的方法中的代码不能假定它eco具有合法Colour值.我需要明确地测试它并按照我的要求处理特殊值.为什么是这样?

在我的拙见中,如果编译器在将超出范围int转换为a时发出错误(甚至是警告)消息enum,如果int在编译时已知该值,则会更好.如果没有,运行时应该在赋值语句中抛出异常.

你怎么看?这有什么原因吗?

(注意:这是我在很久以前在我的博客上发布的一个问题,但没有得到任何信息回复.)

c# enums casting

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

什么是顶级的JavaScript陷阱?

我正在计划关于JavaScript的介绍性演讲,在准备过程中,我想知道新秀陷入的最大陷阱是什么.

我知道在我完全理解闭包之前我已经遇到了一些问题,但JavaScript中的许多奇怪行为都不是我想的了......

那么,你应该向新秀指出哪些陷阱?

javascript debugging

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

为什么编程语言需要关键字?

例如(在C中):

int break = 1;
int for = 2;
Run Code Online (Sandbox Code Playgroud)

为什么编译器必须在所有推断出任何问题,breakfor这里的变量?


所以,我们需要关键字,因为

  • 我们希望程序可读
  • 我们不想让今天已经很复杂的编译器的工作过于复杂
  • 但最重要的是,如果某些"关键词"保留用于某些特殊操作,则语言会更强大.然后,语言可以认为在更高级别上有用,而不是试图以明确的方式实现for循环.

c identifier keyword

32
推荐指数
4
解决办法
3217
查看次数

为什么数字文字不能访问Number方法?

如果查看ECMAScript 3规范,您将看到原始值类型Null和Undefined没有伴随Null和Undefined对象.

>> Null
ReferenceError: Null is not defined
Run Code Online (Sandbox Code Playgroud)

其他原始值类型Number,String和Boolean类型都有伴随的Number,String和Boolean对象,您可以从全局范围引用它们.

>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }
Run Code Online (Sandbox Code Playgroud)

这些原始值类型的目的是提供诸如toStringvalueOf它们各自的原始值类型的方法:

>>var n = 1;
>>n.toString();
"1" 
Run Code Online (Sandbox Code Playgroud)

是相同的

>>var n = 1;
>>Number.prototype.toString.call(n);
"1"
Run Code Online (Sandbox Code Playgroud)

布尔值和字符串也是这样工作的:

>>var b = true;
>>b.toString(); 
"true"
>>Boolean.prototype.toString.call(b);
"true"
Run Code Online (Sandbox Code Playgroud)

当您尝试混合类型时,您可以看到原始值对象正在使用其伴随对象的方法:

>>Boolean.prototype.toString.call(n); 
TypeError: Boolean.prototype.toString is not generic
>>Number.prototype.toString.call(b)
TypeError: Number.prototype.toString is not generic
Run Code Online (Sandbox Code Playgroud)

有趣的是,对于布尔和字符串文字类型,您可以直接从文字中调用这些方法:

>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"
Run Code Online (Sandbox Code Playgroud)

原始值为null和undefined,因为它们没有附带的Null和Undefined对象不能执行以下操作:

>>Null
ReferenceError: Null is not defined …
Run Code Online (Sandbox Code Playgroud)

javascript

27
推荐指数
2
解决办法
2474
查看次数

关于自动装箱和对象平等/身份的Java问题

public class Main { 
    /** 
      * @param args the command line arguments */ 
    public static void main(String[] args) { 
        // TODO code application logic here
        int a1 = 1000, a2 = 1000; 
        System.out.println(a1==a2);//=>true 
        Integer b1 = 1000, b2 = 1000;
        System.out.println(b1 == b2);//=>false 
        Integer c1 = 100, c2 = 100; 
        System.out.println(c1 == c2);//=>true 
    }

}
Run Code Online (Sandbox Code Playgroud)

为什么是b1 == b2虚假和c1 == c2真实的?

java autoboxing integer

16
推荐指数
3
解决办法
4778
查看次数

盒装基元和等价

所以我今天被问到这个问题.

Integer a = 3;
Integer b = 2;
Integer c = 5;
Integer d = a + b;
System.out.println(c == d);
Run Code Online (Sandbox Code Playgroud)

这个节目打印出来的是什么?它返回true.我回答它总会打印出来,因为我理解自动(和自动联合)拳击.我的印象是,分配整数a = 3将创建一个新的整数(3),以便==将评估参考而不是原始值.

有谁能解释一下?

java autoboxing equivalence

15
推荐指数
4
解决办法
4822
查看次数