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): //...
}