我创建了一个只有2个公共函数(构造函数和析构函数)的类X,并且使用sizeof运算符,类大小将变为1.
当我将类型的私有数据成员添加char到上面的类声明时,大小仍然是1.最后,我将一个整数类型作为类数据成员添加到它,现在大小为8个字节.
请向我解释如何计算班级人数.
我想创建使用标准 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'宏可以吗?有没有更好的方法来做到这一点?
目标:应用程序应该能够使用 LoadLibrary 动态加载 dll,并使用 GetProcAddress 调用其导出函数。
我的 dll 类有一个返回该类类型的 unique_ptr 的函数。
我想导出这个函数,以便应用程序可以在成功加载dll后使用getProcAddress调用这个函数。
使用 extern "C" 将不允许在函数签名中使用 C++ 类(在本例中为 unique_ptr 类模板)。
我知道,如果不使用 extern "C",它将使用损坏的名称导出函数(通过 __declspec(dllexport) )。
客户端在调用 getProcAddress 期间不会知道损坏的名称,那么客户端将如何调用此函数呢?
有没有办法导出这样的功能?
我有一个代码片段,我用 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)
任何人,谁能评论到底发生了什么?