草庐IT

std_logic

全部标签

c++ - 在编译时填充 std::array 和 const_cast 可能的未定义行为

已知std::array::operator[]由于C++14是constexpr,请参见下面的声明:constexprconst_referenceoperator[](size_typepos)const;但是,它也是const限定的。如果您想使用std::array的下标运算符以便在编译时为数组赋值,这会产生影响。例如考虑以下用户文字:templatestructFooLiteral{std::arrayarr;constexprFooLiteral():arr{}{for(inti(0);i如果您尝试声明类型为FooLiteral的constexpr变量,上述代码将无法编译。这

c++ - 理解 std::future::then 的延续

谁能用C++中的示例解释async([](){x();y();})和async([]()之间的区别{x();}).then([](){y();})?我的理解是,在后一种情况下,x、y中的每一个都可能会立即在不同的线程中启动,并且只会在get时阻塞(在它们各自的线程中)()在未来作为输入传递时被调用。 最佳答案 ...whatisthedifferencebetweenasync([](){x();y();})andasync([](){x();}).then([](){y();})?真的不多-那么为什么要有呢?一言以蔽之可组合性。它

c++ - 具有与 std::function 不同签名的 Lambda 函数

我不明白为什么第三种情况没问题(即使lambda的参数类型不同于std::function类型)而编译器却提示第四种情况:functionidInt=[](inti){returni;};//OKfunctionidInt=[](int&i){returni;};//OKfunctionidInt=[](inti){returni;};//OKfunctionidInt=[](int&i){returni;};//ERROR! 最佳答案 当你写的时候:functionidInt=[](int&i){returni;};//ERROR

c++ - std::exception_ptr 线程安全吗?

我有一个工作线程,它通过std::thread持续运行、创建和管理。在我的工作线程的顶层,我有一个try/catchblock,里面有一个while循环。如果异常泄漏到线程的顶层,我会捕获它并将其存储在std::exception_ptr中,它是还拥有非静态线程函数的类的成员://Inclassheader(insideclassdeclaration)std::exception_ptrm_threadException;//InclassCPPfilevoidMyClass::MyThreadFunction(){try{while(true){//Dothreadstuff}}c

c++ - `std::any_cast` 返回拷贝

我正在阅读documentationforstd::any_cast我觉得很奇怪,API让转换要么返回一个值给持有的对象,要么返回一个指向它的指针。为什么不返回引用?每次使用非指针类型参数调用函数时都需要创建一个拷贝。我可以看到指针版本的转换可能更能表明意图,也可能更清晰,但为什么不让返回值成为这样的引用呢?templateValueType&any_cast(any*operand);代替templateValueType*any_cast(any*operand);此外,即使您请求引用,强制转换也会删除引用并将拷贝返回到存储的对象,请参阅此处对函数重载1-3的返回值的解释http:

c++ - 修改 std::map 的 key

有没有办法修改std::map或的键?Thisexample展示了如何通过重新平衡树来做到这一点。但是,如果我提供一些不需要重新平衡key的保证呢?#include#include#includeclassKeymap{private:intkey;//thiskeywillbeusedfortheindexinginttotal;public:Keymap(intkey):key(key),total(0){}booloperatormy_index;intmain(){std::mapmy_index;Keymapk(2);my_index.insert(std::make_pai

c++ - `std::condition_variable::wait_for` 经常调用谓词

考虑以下代码片段:#include#include#include#includeintmain(){std::mutexy;std::condition_variablex;std::unique_locklock{y};inti=0;autoincrement=[&]{++i;returnfalse;};usingnamespacestd::chrono_literals;//lock5sifincrementreturnsfalse//let'sseehowoftenwasincrementcalled?x.wait_for(lock,5s,increment);std::cou

c++ - 为什么 std::map 有一个名为 count 的成员函数?

这个问题在这里已经有了答案:WhydoesSTLsethavecount()whenallelementsaresupposedtobeunique?(1个回答)关闭4年前。我正在学习C++,很明显,一种检查std::map中是否存在特定键的方法是使用成员函数count。但我的第一个想法是:键不应该是唯一的吗?并检查documentation实际上它们是唯一的,因此count将返回0或1。把它叫做count是不是有点违反直觉?为什么不存在?对我来说,在您期望元素出现多次的列表中计数是有意义的,但如果该方法只允许返回1或0,那对我来说就没有意义。我错过了什么吗?是否有理由将其称为coun

c++ - 为什么在此 constexpr 函数中允许使用 std::swap?

我写了一个计算两个数字的gcd的函数,它使用std::swap在第二个参数大于第一个参数的情况下。一段时间后,我意识到std::swap不是constexpr,但我的函数仍然编译并成功运行。我尝试使用MinGW-w648.1.0和VisualC++2017,它对两者都有效。我的第一个想法是因为constexpr允许在运行时执行函数,所以我尝试了std::integral_constant,它奏效了。但是,我不能使用我自己的任何非constexpr函数(这是我所期望的)。这是我的测试代码:#includeinlinevoidfoo()noexcept{}templateconstexpr

c++ - 多线程程序中的 std::atomic<int> memory_order_relaxed VS volatile sig_atomic_t

volatilesig_atomic_t是否提供任何内存顺序保证?例如。如果我只需要加载/存储一个整数,可以使用吗?例如这里:volatilesig_atomic_tx=0;...voidf(){std::threadt([&]{x=1;});while(x!=1){/*waiting...*/}//done!}这是正确的代码吗?在某些情况下它可能不起作用?注意:这是一个过度简化的示例,即我不是在为给定的代码片段寻找更好的解决方案。我只想了解在根据C++标准的多线程程序中,我可以从volatilesig_atomic_t中得到什么样的行为。或者,如果是这种情况,请理解行为未定义的原因。