C++ 初始化者,工会的特定成员
我觉得这个问题的答案是否定的,但是否有可能草签一个工会的特定成员?例如:C++ 初始化者,工会的特定成员,c++,winapi,unions,C++,Winapi,Unions,我觉得这个问题的答案是否定的,但是否有可能草签一个工会的特定成员?例如: #include <cassert> #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { auto time = 20090520145024798ull; auto large = ULARGE_INTEGER() = { { time } }; asse
#include <cassert>
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
auto time = 20090520145024798ull;
auto large = ULARGE_INTEGER() = {
{ time }
};
assert(large.QuadPart == time);
return 0;
}
ULARGE_INTEGER large{time};
在这种情况下,标准对初始化顺序有何规定?我曾希望编译器能看到QuadPart是分配的合适成员。保持简单:
ULARGE_INTEGER large;
large.QuadPart = time;
或者,如果你想使用auto并在一行中初始化它,也许可以做一个小助手
inline auto MAKE_ULARGE_INTEGER(ULONGLONG t)
{
ULARGE_INTEGER result;
result.QuadPart = t;
return result;
}
auto large = MAKE_ULARGE_INTEGER(time);
保持简单:
ULARGE_INTEGER large;
large.QuadPart = time;
或者,如果你想使用auto并在一行中初始化它,也许可以做一个小助手
inline auto MAKE_ULARGE_INTEGER(ULONGLONG t)
{
ULARGE_INTEGER result;
result.QuadPart = t;
return result;
}
auto large = MAKE_ULARGE_INTEGER(time);
对于联合,您可以使用列表初始化仅初始化第一个成员,如[dcl.init.aggr]: 当使用大括号内的初始值设定项初始化联合时,大括号只能包含一个初始值设定项子句 用于联合的第一个非静态数据成员。[示例: -[结束示例] 因此,在您的示例中,以下是:
#include <cassert>
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
auto time = 20090520145024798ull;
auto large = ULARGE_INTEGER() = {
{ time }
};
assert(large.QuadPart == time);
return 0;
}
ULARGE_INTEGER large{time};
将初始化u.LowPart
,而不是QuadPart
,无论各种成员的类型是什么
如果您还想做其他事情,您必须明确说明:
ULARGE_INTEGER large;
large.QuadPart = time;
或者编写一个更好的
union
类型,它实际上有一个构造函数 根据[dcl.init.aggr],对于联合,您只能使用列表初始化来初始化第一个成员:
当使用大括号内的初始值设定项初始化联合时,大括号只能包含一个初始值设定项子句
用于联合的第一个非静态数据成员。[示例:
-[结束示例]
因此,在您的示例中,以下是:
#include <cassert>
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
auto time = 20090520145024798ull;
auto large = ULARGE_INTEGER() = {
{ time }
};
assert(large.QuadPart == time);
return 0;
}
ULARGE_INTEGER large{time};
将初始化u.LowPart
,而不是QuadPart
,无论各种成员的类型是什么
如果您还想做其他事情,您必须明确说明:
ULARGE_INTEGER large;
large.QuadPart = time;
或者编写一个更好的
union
类型,它实际上有一个构造函数 这是唯一的办法。或者正如我所说的,制作一个小助手(与我所做的ULARGE_整数的样式相匹配)。你也可以使用自动。每个人和他们的狗似乎都在(ab)使用auto
。这当然不是应该使用auto
的情况。当您不知道具体类型时,在编写库代码时,它很有用。当你知道它的类型时,就不应该使用它。代码应该是可读的,即使您没有将其加载到显示具体类型的工具提示的代码编辑器中(例如,文档中的示例代码、发布为HTML或此网页)。你说的是哪种汽车,功能中使用的第一种还是第二种?不管怎样,也许你应该用另一个例子来抱怨。如果您正在使用这段代码,您就知道auto-large=MAKE_-ULARGE_INTEGER(time)的类型很明显是ULARGE_INTEGER,只需读取函数名即可,这一点非常清楚。至于函数中的auto,完全一样。但是为什么要使用auto
?你知道那种类型。把它说清楚。我不必通过查看实现(或信任函数名)来找出auto
的含义。与使用特定类型相比,使用auto
(两种情况)有什么好处?这是唯一的方法。或者正如我所说的,制作一个小助手(与我所做的ULARGE_整数的样式相匹配)。你也可以使用自动。每个人和他们的狗似乎都在(ab)使用auto
。这当然不是应该使用auto
的情况。当您不知道具体类型时,在编写库代码时,它很有用。当你知道它的类型时,就不应该使用它。代码应该是可读的,即使您没有将其加载到显示具体类型的工具提示的代码编辑器中(例如,文档中的示例代码、发布为HTML或此网页)。你说的是哪种汽车,功能中使用的第一种还是第二种?不管怎样,也许你应该用另一个例子来抱怨。如果您正在使用这段代码,您就知道auto-large=MAKE_-ULARGE_INTEGER(time)的类型很明显是ULARGE_INTEGER,只需读取函数名即可,这一点非常清楚。至于函数中的auto,完全一样。但是为什么要使用auto
?你知道那种类型。把它说清楚。我不必通过查看实现(或信任函数名)来找出auto
的含义。与使用特定类型相比,使用auto
(两种情况)有什么好处?