小编tfo*_*one的帖子

nodejs中的console.log循环

我的MCVE如下

var i = 0;
for(;;)
    console.log(i++)
Run Code Online (Sandbox Code Playgroud)

当我这样做时,在某个时刻,我nodejs只是停止打印东西,给我一个看起来像这样的输出

[...]
684665
684666
684667
Run Code Online (Sandbox Code Playgroud)

然后,我得到了这个:

<--- Last few GCs --->

   69097 ms: Scavenge 1397.2 (1456.7) -> 1397.2 (1456.7) MB, 0.8 / 0 ms (+ 1.7 ms in 1 steps since last GC) [allocation failure] [incremental marking delaying mark-sweep].
   70462 ms: Mark-sweep 1397.2 (1456.7) -> 1396.0 (1456.7) MB, 1364.9 / 0 ms (+ 2.8 ms in 2 steps since start of marking, biggest step 1.7 ms) [last resort gc].
   71833 ms: …
Run Code Online (Sandbox Code Playgroud)

node.js console.log

10
推荐指数
2
解决办法
3259
查看次数

迭代一个元组......再次

我一直在做C++,但我不熟悉模板.

最近,我试着写一个包装的类std::vector<std::tuple<Types...>>.这个类必须有成员函数,我真的需要能够迭代元组.事实上,如果我能够打印元组的每个元素(按顺序),我将能够做我需要的一切.

我找到了一个使用强制转换的解决方案,但我对此并不十分自信,因为它基于我不喜欢的演员(另外,当我尝试使用static_cast它时,它不再编译).

我的问题是,以下代码是正确的,可移植的,它是一个黑客,我应该找到另一种方法来做这个比使用这个演员?此外,这个演员可能是运行时演员吗?没有这个,有没有办法做我想做的事情?

std::ostream& operator<<(std::ostream& out, std::tuple<> const& tuple)
{
    return out; // Nothing to do here
}

template<typename First, typename... Types>
std::ostream& operator<<(std::ostream& out, std::tuple<First, Types...> const& tuple)
{
    out << std::get<0>(tuple) << " ";

    // The cast that I don't like
    return out << (std::tuple<Types...>&) tuple;
}

int main()
{
    auto tuple = std::make_tuple(1, 2.3, "Hello");
    std::cout << tuple << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

提前感谢您的回答.

c++ templates variadic-templates c++14

8
推荐指数
1
解决办法
1822
查看次数

C++模板参数和部分特化:强或弱类型?

今天,我的一个朋友和我在一个愚蠢的错误中苦苦挣扎,我让我想知道模板参数在C++中是如何工作的.考虑下面的代码,我尝试部分特化一个类attr<MyClass<I>>,其中I是一个unsigned int,但MyClass需要一个int参数:

#include <iostream>

template<int I>
class MyClass
{

};

template<typename T>
struct attr;

template<unsigned int I>
struct attr<MyClass<I>>
{

};

int main(int argc, char *argv[])
{
    attr<MyClass<1>> att;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

g++ 失败并显示错误消息

main.cpp: In function ‘int main(int, char**)’:
main.cpp:20:22: erreur : aggregate ‘attr<MyClass<1> > att’ has incomplete type and cannot be defined
     attr<MyClass<1>> att;
Run Code Online (Sandbox Code Playgroud)

clang编译它(仅由于att未使用的事实而发出警告).

所以我想知道:

  • 规范中是否有任何规则可以支持其中一个?

  • 我们可以说clang模板参数的输入比g++'s 弱吗?

c++ templates typing c++14

5
推荐指数
1
解决办法
171
查看次数

Const 和非常量版本以及继承

在我的问题中,我将有几个类共享 getter 和 setter(在我的例子中是operator())。假设我有以下内容

class Base
{
    public:
        int& operator()() { return value; }
        int operator()() const { return value; }
    protected:
        int value;
};

class Derived : public Base
{
    public:
        int operator()() const { return value; }
};
Run Code Online (Sandbox Code Playgroud)

我期望能够做这样的事情:

Derived d;
d() = 1;
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨说该表达式不可赋值。然而,这样做

Derived d;
d.Base::operator()() = 1;
Run Code Online (Sandbox Code Playgroud)

工作正常。这是为什么 ?编译器不应该能够在基类中查找成员函数吗?有没有办法避免重写派生类的非常量方法?

c++ inheritance constants c++14

5
推荐指数
1
解决办法
1181
查看次数

C++加入多个线程

我想做一个for循环,创建更多的线程.

我尝试过:

int i;
for (i = 0; i < 10; i++) {
    thread t1(nThre);
    t1.join();
    cout << "Joined thread n'" << i << '\n';
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.nThre顺序调用(这是一个简单的void例程).

我还询问我是否可以使用预增的i只是一个int,所以: ++iinsted的的i++,这应该是更好的性能.

c++ multithreading

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