c++ 为什么使用临时变量来存储函数调用的结果会产生给予不同的结果?

ghhkc1vu  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(49)

所以,我正在做一个数独游戏,每个正方形将指向其行,列和3x 3 '区域'中的每一个其他正方形。在sudoku构造函数中,我连接相关的正方形。行和列连接没有给予我任何意外的结果-有1296个连接要做,当这部分完成时,打印出来的count显示的是1296,太好了!
现在,当对3x 3区域执行相同操作时,我遇到了一个问题。当使用option 2时,count在324处结束,当打印电路板时,我得到了所需的结果。然而,当将get_node函数的结果存储在临时变量中时,(option1),我得到648,每个正方形的连接数是正确的(16而不是20)。这不应该是这样的,因为所有的get_node函数做的是return _board[(I * dim) + J]。有人知道这样的问题可能来自哪里吗?
提前感谢!
P.S.是的,我暂时禁用了编译器警告,这样goto语句就可以编译了--这不是问题所在,这只是为了让这里的人更清楚地看到:)

// areas
int count(0);
for (int a = 0; a < 3; ++a) {
    for (int b = 0; b < 3; ++b) {
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                for (int m = 0; m < 3; ++m) {
                    for (int n = 0; n < 3; ++n) {
                        if (i == m && j == n) continue;
                        
                        goto option1;
                        
                        //------------------------
                        
                        option1:
                        
                        {
                        auto current_node = get_node(a*3 + i, b*3 + j);
                        auto potential_connection = get_node(a*3 + m, b*3 + n);
                        
                        if (ISINSIDE(current_node.get_connections(), &potential_connection)) continue;
                        current_node.add_connection(&potential_connection);
                        
                        goto end;
                        }
                        
                        //------------------------
                        
                        option2:
                        {
                        
                        if (ISINSIDE(get_node(a*3 + i, b*3 + j).get_connections(), &get_node(a*3 + m, b*3 + n))) continue;
                        get_node(a*3 + i, b*3 + j).add_connection(&get_node(a*3 + m, b*3 + n));
                        
                        goto end;
                        }
                                                    
                        //------------------------
                        
                        end:
                        count += 1;
                        std::cout << count << '\n';
                    }
                }
            }
        }
    }
}

字符串

7dl7o3gd

7dl7o3gd1#

密码不一样。
&get_node(a*3 + m, b*3 + n)&_board[idx],某个数组元素的地址。
&potential_connection不是数组元素的地址,这是一个完全不同的地址,局部变量auto potential_connection = ...的地址
这应该能解决问题

auto& potential_connection = get_node(a*3 + m, b*3 + n);

字符串

相关问题