草庐IT

noexcept-ness

全部标签

c# - 关于 Endian-ness 和 .Net 的详细信息?

我有几个关于字节序的问题,这些问题足够相关,我保证将它们作为一个问题提出:1)字节顺序是由.Net还是硬件决定的?2)如果是由硬件决定的,我如何在C#中找出硬件的字节序?3)endian-ness是否影响二进制交互,例如OR、AND、XOR或移位?IE。向右移位一次是否总是移出最低有效位?4)我对此表示怀疑,但是不同版本的.Net框架在字节顺序上是否存在差异?我假设它们都是一样的,但我已经学会停止假设一些较低级别的细节,例如这个。如果需要,我可以将这些问题作为不同的问题提出,但我认为知道其中一个问题答案的任何人都可能知道所有问题的答案(或者可以为我指出一个好的方向)。

c++ - 编译时检测不应该抛出但仍然抛出的函数(noexcept 或替代方法)

我知道noexcept只是提供信息,gcc/clang不会触发此代码段的任何警告/错误:voidfoo()noexcept{throw1;}intmain(){foo();return0;}那么-有没有办法或技术来标记一个函数不抛出任何东西,如果实现抛出,实际上从编译器获得编译时警告/错误?一个简单的用例-我有一个框架,它公开了一组客户端插件应该实现的接口(interface),然后框架从共享对象加载插件,通过工厂实例化接口(interface)并调用接口(interface)方法。我希望在调用期间不会在库边界上抛出异常,因此我想将插件实现的接口(interface)中的所有函数标记为

c++ - 为什么 C++11/14 中的 std::forward 没有 std::move_if_noexcept 对应项?

我观看了ScottMeyers在GoingNative2013“AnEffectiveC++11/14Sampler”上的演讲,他解释了std::move_if_noexcept的使用。所以我认为应该有一个std::forward_if_noexcept来保证forward的异常安全?为什么标准库中没有这样的东西?有没有其他保证的可能? 最佳答案 前向语义已经是有条件的,即它们保留其参数的值类别。另一方面,移动无条件地将其参数的值类别(从左值变为右值)更改为右值(引用),std::move_if_noexcept获得基于移动构造函数

c++ - 如何在 C++17 中将抛出函数指针静态转换为 noexcept?

C++17使noexcept成为函数类型的一部分。它还允许从noexcept函数指针到潜在的抛出函数指针的隐式转换。void(*ptr_to_noexcept)()noexcept=nullptr;void(*ptr_to_throwing)()=ptr_to_noexcept;//implicitconversionhttp://eel.is/c++draft/expr.static.cast#7表示static_cast可以执行这种转换的逆操作。void(*noexcept_again)()noexcept=static_cast(ptr_to_throwing);不幸的是,GCC

c++ - `public` 访问限定符和 `const` ness。 `-Wuninitialized`

classFoo{public:constintx;};classBar{private:constintx;};输出:test.cpp:10:13:warning:non-staticconstmember‘constintBar::x’inclasswithoutaconstructor[-Wuninitialized]为什么Bar会产生警告而Foo不会(显然是因为访问限定符,但逻辑是什么?)。 最佳答案 有了这些定义,由于Foo::x是公开的,你可以有效地实例化一个Foo类似的东西:Foof{0};//C++11或Foof={

c++ - noexcept,继承构造函数和实际上完整的不完整类型的无效使用

我不确定这是GCC编译器的错误还是noexcept的预期行为。考虑以下示例:structB{B(int)noexcept{}virtualvoidf()=0;};structD:publicB{usingB::B;D()noexcept(noexcept(D{42})):B{42}{}voidf()override{}};intmain(){B*b=newD{};}如果noexcept被移除,它会编译。无论如何,就像在示例中一样,我从GCCv5.3.1中得到了这个错误:test.cpp:8:31:error:invaliduseofincompletetype‘structD’D()n

c++ - const-ness 作为模板参数

我有两个结构://-----non-const-----structarg_adapter{EArgTypetype;//fmtA,fmtB,...union{TypeA*valueA;TypeB*valueB;//...moretypes}arg_adapter(TypeA&value):type(fmtA),valueA(&value){}arg_adapter(TypeB&value):type(fmtB),valueB(&value){}//...}//-----constversion-----structconst_arg_adapter{EArgTypetype;//fm

c++ - 默认情况下是默认构造函数/赋值 noexcept/constexpr 吗?

所以,我的问题很简单:将默认的类构造函数指定为noexcept有什么意义吗?或constexpr(或任何其他你可以考虑的事情)?structfoo{foo()=default;//vsconstexprfoo()noexcept=default;//samethingwouldapplyforcopy/movectorsandassignmentoperators};两者的行为方式是否相同?是否取决于类是否为POD?例如,对于上面的示例,两者的行为方式相同,而如果我有一个私有(private)成员std::vectorv={1,2,3,4};使用类作业,foo()=default;默认

c++ - 如果类型为 noexcept,C++ 11 STL 中的哪些算法和容器可以运行得更快?

在工作中出现了关于使用noexcept有多少关心的争论。我们都知道noexcept并没有真正为编译器的优化器做很多事情,除了编译器必须假设的外部定义的代码可能会抛出,因为它不知道它的实现,所以标记事物的唯一真正的其他性能优势noexcept用于使用std::move_if_noexcept的代码假设主要是STL容器及其算法。因此评估是这样的:不使用noexcept,除非:编译器不知道可调用的实现的外部函数和类。移动构造函数、移动赋值运算符并交换任何可能包含在STL容器中的类型。否则别担心。这是一个公平的评估吗?如果某些东西不是异常(exception),STL中是否还有其他地方可以生成

C++ noexcept 用于不抛出异常但可能导致内存故障的函数

例如,有两种不同的方法来访问私有(private)数组的元素是很常见的,重载数组下标运算符,或定义at:T&operator[](size_ti){returnv[i];}Tconst&operator[](size_ti)const{returnv[i];}T&at(size_ti){if(i>=length)throwout_of_range("Youshallnotpass!");returnv[i];}Tconst&at(size_ti)const{if(i>=length)throwout_of_range("Youshallnotpass!");returnv[i];}at