小编Wei*_* Li的帖子

如果我将一个浮点数复制到另一个变量,它们会相等吗?

我知道使用==检查浮点变量的相等性不是一个好方法。但我只想通过以下陈述来了解这一点:

float x = ...

float y = x;

assert(y == x)
Run Code Online (Sandbox Code Playgroud)

既然y是从 复制的x,那么这个断言是真的吗?

c++ floating-point

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

为什么C++强制成员变量的初始化按照声明的顺序

我知道在 C++ 中,类头中成员的声明定义了初始化顺序。你能告诉我为什么 C++ 选择这种设计吗?强制初始化顺序而不是遵循初始化列表有什么好处吗?

c# c++ initialization initialization-order

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

这是错误还是C ++语言功能

以下代码可以正常工作:

#include <type_traits>

template <typename> class AddLayer;

template <template <typename> class TLayer>
struct LayerInputPortSet
{
    using type = int;
};

template <>
struct LayerInputPortSet<AddLayer>
{
    using type = float;
};

using type = typename LayerInputPortSet<AddLayer>::type;
static_assert(std::is_same_v<type, float>);
Run Code Online (Sandbox Code Playgroud)

但进行以下修改:

#include <type_traits>

template <typename> class AddLayer;

template <template <typename> class TLayer>
struct LayerInputPortSet
{
    using type = int;
};

template <>
struct LayerInputPortSet<AddLayer>
{
    using type = float;
};

template <template<typename> class TLayer>
struct Sublayer
{
    template <typename TInputs>
    using LayerType = …
Run Code Online (Sandbox Code Playgroud)

c++ templates language-lawyer

5
推荐指数
0
解决办法
93
查看次数

无法在初始化列表中捕获

对于以下代码:

#include <iostream>

struct Str
{
    Str() { throw 100; }
};

class Cla
{
public:
    Cla()
    try : m_mem() { }
    catch(...)
    {
        std::cout << "Catch block is called"<< std::endl;
    }
private:
    Str m_mem;
};

int main()
{
    Cla obj;
}
Run Code Online (Sandbox Code Playgroud)

我试图在 catch 块中捕获异常。但catch块运行后,系统仍然调用std::terminate来终止程序。我没有在catch块中重新抛出异常,你能告诉我为什么系统崩溃吗?谢谢!

这是对编译器资源管理器的测试:https://godbolt.org/z/74sTcxrY4

c++

4
推荐指数
2
解决办法
112
查看次数