Bar*_*uch 4 c++ casting unions
以下似乎对我来说是完全符合逻辑的,但是无效的c ++.联合不能隐式地转换为其中一个成员类型.任何人都知道一个很好的理由吗?
union u {
int i;
char c;
}
function f(int i) {
}
int main() {
u v;
v.i = 6;
f(v);
}
Run Code Online (Sandbox Code Playgroud)
并且任何人都可以建议一个干净的替代品(我能想到的最干净的是f(v.i);,我承认它非常干净,但上面看起来更干净)
650*_*502 12
虽然同意Crazy Eddie认为它对我来说看起来不那么好,但实际上你可以通过定义它来获得隐式转换:
union u {
int i;
char c;
operator int () const { return i; }
operator char () const { return c; }
};
Run Code Online (Sandbox Code Playgroud)
之所以不能隐式使用(默认情况下),是因为它可能不明确。拥有多个相同类型的成员是完全合法的,并且没有理由偏爱其中之一。
union u
{
char c;
TCHAR t;
wchar_t w;
int i;
};
void f(TCHAR);
u v;
f(v); // which member should be used?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6453 次 |
| 最近记录: |