我的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) 我一直在做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++中是如何工作的.考虑下面的代码,我尝试部分特化一个类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 弱吗?
在我的问题中,我将有几个类共享 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)
工作正常。这是为什么 ?编译器不应该能够在基类中查找成员函数吗?有没有办法避免重写派生类的非常量方法?
我想做一个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++,这应该是更好的性能.