C++ 是否有任何真实案例证明';#x27;有必要吗?

C++ 是否有任何真实案例证明';#x27;有必要吗?,c++,c++11,keyword,sizeof,variadic-templates,C++,C++11,Keyword,Sizeof,Variadic Templates,我想知道新的操作员sizeof…(不要与sizeof操作员混淆)的优点。我在网上搜索了一些例子,这些例子似乎都与下面的例子相似: template<class... ArgTypes> std::size_t GetLength() { return sizeof...(ArgTypes); } < > C++中引入了第一个最重要的原因 sieSo/ 因为它出现在C中,这是为了 要知道要分配多少内存,例如malloc( n*sizeof(struct MyClass))。在

我想知道新的操作员
sizeof…
(不要与
sizeof
操作员混淆)的优点。我在网上搜索了一些例子,这些例子似乎都与下面的例子相似:

template<class... ArgTypes>
std::size_t GetLength()
{
    return sizeof...(ArgTypes);
}

< > C++中引入了第一个最重要的原因<代码> sieSo/<代码> 因为它出现在C中,这是为了 要知道要分配多少内存,例如
malloc(
n*sizeof(struct MyClass))
。在C++中,它被用于类似的 分配和初始化分开的情况,例如 容器类、变体或类中的示例

它也被用于模板元编程,例如 与函数覆盖分辨率结合使用。沿途的事情 行:
sizeof(discriminatorFunction(someArgs))==sizeof(

TrueType)

您可能希望阅读评论中STL和CornedBee之间的讨论:

重要信息:

大小。。。不过,它不仅仅是语法上的糖分。手动实现的 大小。。。将具有线性“运行时”(实例化的数量), 而内置的尺寸。。。是O(1)。(变量的一个大问题是 他们担心的是,由于缺乏数据,汇编往往非常缓慢 随机访问参数包。一些家伙(我认为来自Boost) 对此进行了研究,发现Boost.Tuple的编译速度 预压力机驱动的非变量元组)编译 比基于简单变量的版本更快。)


以下是我的示例,说明如何使用
sizeof…

/// Transform a single boolean value into a number
constexpr unsigned int boolCode(bool value) {
    return value;
}

/// Transform a sequence of booleans into a number
template <typename... Args>
constexpr unsigned int boolCode(bool value, Args... others) {
    return value << sizeof...(others) | boolCode(others...);
}

sizeof…(T)
提供实际功能。当然,它可以用语言的其余部分实现,看起来像
size\u of()
,但是内置它并没有什么坏处(它提供了获得更好性能的机会,并且没有添加新的关键字)。我不明白您的“more”指的是什么。比什么更优雅?比什么更有表现力?我知道,计算参数包中元素数量的唯一其他方法是递归元函数…@LuchianGrigore:看看任何类型的可变索引扩展代码。任何带着一个包的东西,并且每个都像一个,或者
get…
thing…@NikosC<代码>模板结构sizeer{enum{value=0};};模板结构sizer{enum{value=1+sizer::value};},对于各种类型都有类似的代码,这是我希望使用的,而不是
sizeof…
,如果它不存在的话。请注意,它需要一个O(N)递归深度来查找N个参数列表的大小,而
sizeof…
则需要O(1)深度。至于使用
sizeof…
,每当你想建立一个索引将变量参数放入元组或提取元组,你最终都会使用它。这里的问题是指
sizeof…
,而不是
sizeof
。这些都是不同的东西(),现在的问题无论如何都不清楚,因为OP没有说明他希望作为
sizeof…
的替代方案,OP的意思是
sizeof…
而不是
sizeof
/// Transform a single boolean value into a number
constexpr unsigned int boolCode(bool value) {
    return value;
}

/// Transform a sequence of booleans into a number
template <typename... Args>
constexpr unsigned int boolCode(bool value, Args... others) {
    return value << sizeof...(others) | boolCode(others...);
}
switch (boolCode(condition1, condition2, condition3)) {
case boolCode(false,false,false): //...
case boolCode(false,false,true): //...
case boolCode(false,true,false): //...
case boolCode(false,true,true): //...
case boolCode(true,false,false): //...
case boolCode(true,false,true): //...
case boolCode(true,true,false): //...
case boolCode(true,true,true): //...
}