小编lar*_*sch的帖子

在Ruby中,为什么nil [1] = 1评估为nil?

例如:

nil[1]     #=> NoMethodError
nil[1]=1   #=> nil
Run Code Online (Sandbox Code Playgroud)

这不仅仅是语法,因为变量也是如此:

a = nil
a[1]       #=> NoMethodError
a[1]=1     #=> nil
Run Code Online (Sandbox Code Playgroud)

奇怪:

nil.method(:[]=)   #=> NameError
[].method(:[]=)    #=> #<Method...>
Run Code Online (Sandbox Code Playgroud)

Ruby 2.3.0p0

ruby null ruby-2.3

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

函数的重载解析取决于模板参数

在下面的示例中,函数模板 ( quartic) 使用重载的全局函数 ( square)。编译时,仅考虑在模板本身之前声明的重载,因此square(int)使用 so 而不是square(double),即使square(double)在使用模板之前声明也是如此。

int square(int);

template<typename T>
T quartic(T value) {
    return square(square(value));
}

double square(double);

double x(double y) {
    return quartic(4.0); // Uses square(int), wanted square(double)
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以根据square使用模板时可用的内容来决定哪个重载版本,以便用户可以实现他使用的square任何类型?T

注意:奇怪的是,MSVC 将使用square(double),而 GCC、clang 和 icc 使用square(int)

c++ templates overloading

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

标签 统计

c++ ×1

null ×1

overloading ×1

ruby ×1

ruby-2.3 ×1

templates ×1