有趣的初赛题目——关于强制转换

文章目录

#include<bits/stdc++.h>
using namespace std;
struct node1 {
	int b;
	node1() { b = 1; }
	node1(int x) { b = x; }
} a;
struct node2 {
	int b;
	node2() { b = 1; }
	node2(int x) { b = x; } 
	node2(node1 x) { b = x.b * 2; } 
};
void out(node1 x) { cout << x.b << ' '; }
void out(node2 x) { cout << x.b << ' '; }
void out(int x) { cout << x << ' '; }
int main() {
	out((node2)a.b);
	out((node2)(a).b);
	out(node2(a).b);
}

这段代码执行后输出结果为:

A. 2 2 2

B. 2 1 2

C. 1 2 2

D. 1 1 2

答案为 D。

解析:成员运算 . 大于强制转换,所以前两个都会先执行 .,而第三个输出会先调用构造函数再执行 .

本文作者:ZnPdCo

本文链接: https://znpdco.github.io/blog/2024/09/21/%E6%9C%89%E8%B6%A3%E7%9A%84%E5%88%9D%E8%B5%9B%E9%A2%98%E7%9B%AE%E2%80%94%E2%80%94%E5%85%B3%E4%BA%8E%E5%BC%BA%E5%88%B6%E8%BD%AC%E6%8D%A2/

本页面的全部内容在 CC BY-SA 4.0SATA 协议之条款下提供,附加条款亦可能应用

评论