在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“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的缺点是总是试图做你想做的,而不是你说的。