答案是C++程序员最爱的类型安全。
typedef本质上就只是一个别名而已。
但是struct实实在在是不同的类型,尽管他们成员相同。
int main() {
typedef int T1;
typedef int T2;
T1 t1 = 0;
T2 t2 = 1;
std::cout << typeid(t1).name() << endl;
std::cout << typeid(t2).name() << endl;
struct {
int i;
} s1;
struct {
int i;
} s2;
std::cout << typeid(s1).name() << endl;
std::cout << typeid(s2).name() << endl;
t1 = t2; //不会报错
s1 = s2; //会报错
}
前半部分执行结果:
执行完成,耗时:0 ms
i
i
Z4mainE3$_0
Z4mainE3$_1
最后两行:
执行完成,耗时:N/A
Line 18: Char 8: error: no viable overloaded '='
s1 = s2; //会报错
~~ ^ ~~
Line 9: Char 5: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from 'struct (anonymous struct at solution.cpp:17:5)' to 'const (anonymous struct at solution.cpp:14:5)' for 1st argument
struct {
^
Line 9: Char 5: note: candidate function (the implicit move assignment operator) not viable: no known conversion from 'struct (anonymous struct at solution.cpp:17:5)' to '(anonymous struct at solution.cpp:14:5)' for 1st argument
struct {
^
1 error generated.