这个简短的程序是合法的c++吗?

Is this short program legal C++?

本文关键字:c++ 程序      更新时间:2023-10-16

在解决http://cppquiz.org上的测试时,我发现了这段有趣的代码:

#include <iostream>
int f(int& a, int& b) {
    a = 3;
    b = 4;
    return a + b;
}
int main () {
    int a = 1;
    int b = 2;
    int c = f(a, a);// note a,a
    std::cout << a << b << c;
}

我的问题是这个程序是合法的c++还是不是?我担心严格混叠

你提到严格混叠——但严格混叠涉及不同类型的别名。它不适用于这里。

没有规则禁止这个代码。它在道德上相当于下面的代码:

int x = 42;
int& y = x;
int& z = x;

或者,更相关地说,它相当于在树数据结构中有几个子节点引用相同的父节点。

是的,这是合法的。

我只能通过引用c++标准文本的大部分来正式地证明

传递两个引用,它们都指向同一个对象,这是完全正确的。然后依次将新值赋给该对象。还好。