相关疑难解决方法(0)

C++中函数的可变参数数量

如何在C++中的函数中包含可变数量的参数.

C#中的模拟:

public void Foo(params int[] a) {
    for (int i = 0; i < a.Length; i++)
        Console.WriteLine(a[i]);
}

public void UseFoo() {
    Foo();
    Foo(1);
    Foo(1, 2);
}
Run Code Online (Sandbox Code Playgroud)

Java中的模拟:

public void Foo(int... a) {
    for (int i = 0; i < a.length; i++)
        System.out.println(a[i]);
}

public void UseFoo() {
    Foo();
    Foo(1);
    Foo(2);
}
Run Code Online (Sandbox Code Playgroud)

c c++ syntax variadic-functions

31
推荐指数
4
解决办法
7万
查看次数

c ++中内联函数的零成本列表

我喜欢在列表上编写函数检查.为此我通常写一个这样的函数:

inline bool good_strings(const std::vector<const char *> & items)
{
    for (i in items) {
        if (not is_good(i)) return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

然后我可以写得像if (all_good({"a", "b", "c", "d", "e"})) {...},它看起来非常好.当您对几件物品的检查变得更大时,这很好用:

if (is_good("a") and is_good("b") and /* that's too much, man */ is_good("c")) {...}
Run Code Online (Sandbox Code Playgroud)

但我关心的是我使用的容器的开销,也很难选择一个:std::vector,std::list,QList,QStringList或者甚至std::arraystd::initializer_list- 应该使用内联函数?在使用括号创建时,这些中的哪一个具有最小甚至零开销{}

好的,并且更新:我抓住了我的朋友许可的IDA Pro并检查了一些选项.

  • std::initializer_list:该函数甚至没有内联,并且存在创建列表和复制指针的开销.
  • std::vector:函数内联,但是,创建向量和复制指针存在开销.
  • std::array:由于模板特化而不是很好看,而且函数没有内联.因此,多次调用会创建许多类似的代码块.但是,没有数组创建的开销,并且所有指针都作为函数参数传递,这对于x86_64寄存器调用约定来说很快.

问题仍然存在,是否有一个绝对零成本的容器

c++ stl inline overhead c++11

6
推荐指数
1
解决办法
304
查看次数

如何将C++参数包映射到std :: pair对象序列?

我有一个可变参数模板函数foo():

template <typename... Args>
void foo(Args &&... args);
Run Code Online (Sandbox Code Playgroud)

此函数旨在使用的所有参数调用size_t.我可以使用一些元编程来强制执行.我需要一次获取两个参数的结果列表,并将它们放入容器中std::pair<size_t, size_t>.从概念上讲,类似于:

std::vector<std::pair<size_t, size_t> > = { 
    std::make_pair(args[0], args[1]), 
    std::make_pair(args[2], args[3]), ...
};
Run Code Online (Sandbox Code Playgroud)

有一种直截了当的方法吗?我知道通过包扩展,我可以将参数放入一个扁平的容器中,但是有没有办法将它们两个一起分组到std::pair对象中?

c++ c++11

3
推荐指数
1
解决办法
959
查看次数

标签 统计

c++ ×3

c++11 ×2

c ×1

inline ×1

overhead ×1

stl ×1

syntax ×1

variadic-functions ×1