小编fre*_*low的帖子

在C++中适当的堆栈和堆使用?

我已经编程了一段时间,但它主要是Java和C#.我实际上从来没有必须自己管理内存.我最近开始用C++编程,我有点困惑的是什么时候我应该把东西存放在堆栈上以及何时将它们存储在堆上.

我的理解是,非常频繁访问的变量应该存储在堆栈中,对象,很少使用的变量和大型数据结构都应该存储在堆上.这是正确的还是我错了?

c++ heap stack memory-management c++-faq

121
推荐指数
5
解决办法
6万
查看次数

x86 SIMD内在函数的头文件

哪些头文件为不同的x86 SIMD指令集扩展(MMX,SSE,AVX,...)提供内在函数?似乎不可能在网上找到这样的清单.如我错了请纠正我.

x86 sse simd header-files intrinsics

121
推荐指数
5
解决办法
5万
查看次数

调用静态泛型方法

我遇到了一个涉及静态泛型方法的奇怪情况.这是代码:

class Foo<E>
{
    public static <E> Foo<E> createFoo()
    {
        // ...
    }
}

class Bar<E>
{
    private Foo<E> member;

    public Bar()
    {
        member = Foo.createFoo();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我不必在表达式中指定任何类型参数Foo.createFoo()?这是某种类型推断吗?如果我想明确它,我如何指定类型参数?

java generics static type-inference

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

为什么我们有map,fmap和liftM?

map :: (a -> b) -> [a] -> [b]

fmap :: Functor f => (a -> b) -> f a -> f b

liftM :: Monad m => (a -> b) -> m a -> m b
Run Code Online (Sandbox Code Playgroud)

为什么我们有三个不同的功能,基本上是一样的?

monads redundancy haskell list functor

96
推荐指数
1
解决办法
8718
查看次数

插入地图的首选/惯用方式

我已经确定了四种不同的插入方式std::map:

std::map<int, int> function;

function[0] = 42;
function.insert(std::map<int, int>::value_type(0, 42));
function.insert(std::pair<int, int>(0, 42));
function.insert(std::make_pair(0, 42));
Run Code Online (Sandbox Code Playgroud)

哪一种是首选/惯用的方式?(还有另一种我没想过的方法吗?)

c++ stl insert stdmap std-pair

91
推荐指数
5
解决办法
10万
查看次数

initializer_list和移动语义

我允许将元素移出std::initializer_list<T>

#include <initializer_list>
#include <utility>

template<typename T>
void foo(std::initializer_list<T> list)
{
    for (auto it = list.begin(); it != list.end(); ++it)
    {
        bar(std::move(*it));   // kosher?
    }
}
Run Code Online (Sandbox Code Playgroud)

由于std::intializer_list<T>需要特殊的编译器注意并且没有像C++标准库的普通容器那样的值语义,所以我宁愿安全而不是抱歉并且问.

c++ templates initializer-list move-semantics c++11

88
推荐指数
2
解决办法
1万
查看次数

lambda函数可以递归吗?

可能重复:
c ++ 0x中的递归lambda函数

这是一个普通的旧递归函数:

int fak(int n)
{
    return (n <= 1) ? 1 : n * fak(n - 1);
}
Run Code Online (Sandbox Code Playgroud)

我如何编写像lambda函数这样的递归函数?

[](int n) { return (n <= 1) ? 1 : n * operator()(n - 1); }
// error: operator() not defined

[](int n) { return (n <= 1) ? 1 : n * (*this)(n - 1); }
// error: this wasn't captured for this lambda function
Run Code Online (Sandbox Code Playgroud)

是否有任何表达当前lambda的表达式,因此它可以递归调用自身?

c++ recursion lambda c++11

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

基于范围的'for'循环是否弃用了许多简单的算法?

算法解决方案

std::generate(numbers.begin(), numbers.end(), rand);
Run Code Online (Sandbox Code Playgroud)

基于范围的for-loop解决方案:

for (int& x : numbers) x = rand();
Run Code Online (Sandbox Code Playgroud)

为什么我要std::generate在C++ 11中使用更冗长的基于范围的for循环?

c++ algorithm foreach stl c++11

81
推荐指数
7
解决办法
7907
查看次数

为什么这会调用默认构造函数?

struct X
{
    X()    { std::cout << "X()\n";    }
    X(int) { std::cout << "X(int)\n"; }
};

const int answer = 42;

int main()
{
    X(answer);
}
Run Code Online (Sandbox Code Playgroud)

我本来希望这打印

  • X(int),因为X(answer);可以解释为铸件从intX,或
  • 什么都没有,因为X(answer);可以解释为变量的声明.

但是,它打印X(),我不知道为什么X(answer);会调用默认构造函数.

奖励积分:我需要更改什么才能获得临时而非变量声明?

c++ syntax most-vexing-parse

80
推荐指数
3
解决办法
2455
查看次数

- > < - 运算符有什么作用?

我最近发现了以下代码:

IntPredicate neg = x -> x <- x;
Run Code Online (Sandbox Code Playgroud)

这是什么,某种反向双lambda?

java syntax obfuscation lambda java-8

73
推荐指数
1
解决办法
3194
查看次数