小编Mar*_*urg的帖子

为什么 std::wstring().capacity() 的 constexpr 不等于 std::wstring().capacity()?

我不确定我是否太na\xc3\xafve 或者只是太无知。

\n

但为什么下面的内容有所不同呢?

\n
constexpr auto nInitialCapacity1 = std::wstring().capacity();\nconst auto     nInitialCapacity2 = std::wstring().capacity();\n
Run Code Online (Sandbox Code Playgroud)\n

在 Visual Studio 2022/17.0.5 中,上述代码导致:

\n
nInitialCapacity1 = 8\nnInitialCapacity2 = 7\n
Run Code Online (Sandbox Code Playgroud)\n

为什么(编译时)版本的结果constexpr不等于const调用的版本?

\n

感谢您的任何解释!

\n

c++ stl visual-c++ constexpr visual-studio-2022

13
推荐指数
1
解决办法
847
查看次数

如何将 C 风格的编译时数组转换为 std::array

在我们的资料中,我们经常有这样的事情:

static const int g_numbers[]{ 1, 2, 3, 4, 5};
static const struct
{
    const int         m_nID;
    const char* const m_pszName;
}
g_collection[]
{
    { 1, "Max" },
    { 2, "Fabian" },
    { 3, "Martin" },
    …
};
Run Code Online (Sandbox Code Playgroud)

如何将这些编译时数组转换为现代 C++?使用例如std::array

如果我理解正确, std::array 需要一个大小作为模板参数。

您建议采用哪种方式以最小的开销(例如代码生成)和不必要的冗余信息来转换此类代码?

c++ arrays c++17

5
推荐指数
2
解决办法
140
查看次数

范围循环的c ++比递减循环更快

我们经常以这种方式从最后一个元素开始循环遍历数组:

static const char* pszStrings[] = { ... }
for (size_t i = _countof(pszStrings); i--;)
    use(pszStrings[i]);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果基于for循环的新范围是有效的,那么使用:

static const char* pszStrings[] = { ... }
for (auto string : pszStrings)
    use(string);
Run Code Online (Sandbox Code Playgroud)

另外......

由于我无法查看生成的代码,即使我不知道,如果我能够得出正确的结论,我会很高兴没有太科学的答案!

c++ performance for-loop c++11

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