在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?
请每个回答只回答一个特征。
在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?
请每个回答只回答一个特征。
当前回答
对于那些从未使用过COBOL的人来说,这是一个常见的代码行,但它不做您可能想做的事情
图片XXX
其他回答
早期的FORTRAN,空格不重要。(anti-Python !)
DO 20 I = 1, 10
含义:从这里循环到第20行,I从1到10。
DO 20 I = 1. 10
含义:将1.10分配给名为DO20I的变量。
有传言说这个漏洞毁了一个太空探测器。
c++(或Java)中没有封装的事实。任何对象都可以违反任何其他对象的封装,破坏它的私有数据,只要它是相同的类型。例如:
#include <iostream>
using namespace std;
class X
{
public:
// Construct by passing internal value
X (int i) : i (i) {}
// This breaks encapsulation
void violate (X & other)
{
other.i += i;
}
int get () { return i; }
private:
int i;
};
int main (int ac, char * av[])
{
X a(1), b(2), c(3);
a.violate (c);
b.violate (c);
cout << c.get() << endl; // "6"
}
C + + 1 xλ的:
[] (int x) { std::cout << x << std::endl; } ();
它们可能被滥用在一些奇怪的语法中:
[](){}();[]{[]{}();}();
这是完全有效的c++ 1x。
闲聊:
在类Test中有一个类方法,返回一个常量字符串:
method1
^ 'niko'
无论发生什么,这个方法都会不断返回字符串'niko'。但事实并非如此。
s := Test method1
(设置为“niko”。)
s at: 4 put: $i.
(设置为“niki”。)
s := Test method1
(再次设置为“niki”。)
因此,第二行代码永久地将method1更改为返回'niki'而不是'niko',即使方法的源代码没有更新。
Perl
my %h1 = map { $_ => 1 } qw/foo bar baz/; // construct an 'is_member' type lookup table
my %h2 = map { "$_" => 1 } qw/foo bar baz/;
第二行是一个语法错误,即使对一个有经验的perl程序员来说,它看起来是一样的。perl的缺点是总是试图做你想做的,而不是你说的。