小编Ish*_*ita的帖子

c ++ sizeof运算符如何计算大小?

我创建了一个只有2个公共函数(构造函数和析构函数)的类X,并且使用sizeof运算符,类大小将变为1.

当我将类型的私有数据成员添加char到上面的类声明时,大小仍然是1.最后,我将一个整数类型作为类数据成员添加到它,现在大小为8个字节.

请向我解释如何计算班级人数.

c++ class sizeof

14
推荐指数
2
解决办法
1527
查看次数

'_HAS_CXX17' marco 是否可用于自定义项目标头以启用 C++17 语言集功能?

我想创建使用标准 C++ 中的“可选”的头文件。但是,我的标头将从 Visual Studio 2015 和 Visual Studio 2017 项目中引用。

我想要一些东西,例如对于 Visual Studio 2017(带有 C++ 17 lang 功能集),使用 std::optional ,并且在 Visual Studio 2015 中使用 boost::optional 。

我在想这样的事情:

#include <yvals.h>
#if _HAS_CXX17
 #include <optional>
 template <typename T> using Optional = std::optional<T>;
#else
 #include "boost/optional/optional.hpp"
 template <typename T> using Optional = boost::optional<T>;
#endif
Run Code Online (Sandbox Code Playgroud)

这样使用'_HAS_CXX17'宏可以吗?有没有更好的方法来做到这一点?

c++ boost-optional visual-studio-2017 stdoptional

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

从不带 extern "C" 的 dll 导出 C++ 函数

目标:应用程序应该能够使用 LoadLibrary 动态加载 dll,并使用 GetProcAddress 调用其导出函数。

我的 dll 类有一个返回该类类型的 unique_ptr 的函数。

我想导出这个函数,以便应用程序可以在成功加载dll后使用getProcAddress调用这个函数。

使用 extern "C" 将不允许在函数签名中使用 C++ 类(在本例中为 unique_ptr 类模板)。

我知道,如果不使用 extern "C",它将使用损坏的名称导出函数(通过 __declspec(dllexport) )。

客户端在调用 getProcAddress 期间不会知道损坏的名称,那么客户端将如何调用此函数呢?

有没有办法导出这样的功能?

c++ dllexport

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

std::rethrow_exception(nullptr) 未定义行为还是 bad_exception?

我有一个代码片段,我用 nullptr 作为参数调用 rethrow_exception。文档说参数应该是非空的,但我想知道,如果我通过 nullptr,行为是未定义的还是已知的?

我每次都变得 bad_exception。但是,此链接表示该行为未定义。

std::string msg;
    try
    {
        std::rethrow_exception(nullptr);
    }
    catch (std::bad_exception &ex)
    {
        msg = ex.what();
    }
    catch (std::exception &ex)
    {
        msg = ex.what();
    }
    catch (...)
    {
        msg = "uncaught exception!";
    }
Run Code Online (Sandbox Code Playgroud)

任何人,谁能评论到底发生了什么?

c++ exception nullptr language-lawyer rethrow

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