小编gre*_*g_p的帖子

C++ - 将 constexpr char * 分配给 static char * 复制字符串...这是一个错误吗?

考虑以下程序。它只是将 a 复制constexpr const char *到 a static const char *。我希望指针被复制,并且是相同的。这就是 gcc、clang 和 msvc 的大多数选项都会发生的情况。

但是,当使用 flag/Zi标志而不是/ZI最近的 msvc 时,会触发断言。我想知道这是编译器错误还是只是未定义的行为。

#include <cassert>

constexpr const char *test = "test";

int main()
{
    static const char *a = test;
    assert(a == test);
}
Run Code Online (Sandbox Code Playgroud)

这是编译器资源管理器链接:https://godbolt.org/z/WPz7GPosa。只需在执行程序选项卡中更改/Zi为即可/ZI使断言消失。

谢谢!

c++ constexpr

6
推荐指数
0
解决办法
450
查看次数

有没有办法在 c++20 中创建不可复制的聚合结构?

在 C++20 中,聚合不能有用户声明或继承的构造函数(因此您不能将它们声明为删除)。那么有没有办法让结构体仍然是聚合的,但不可复制呢?

c++ aggregate c++20

4
推荐指数
1
解决办法
176
查看次数

当一个函数接受对另一个函数的转发引用时,使用 std::forward 调用该函数有何影响

只是想知道转发函数模板参数的确切影响(和优点)是什么,即:

template <class F>
void foo(F &&f) {
   f(1);                    // how does this call
   std::forward<F>(f)(1);   // differ from this one?
}
Run Code Online (Sandbox Code Playgroud)

c++ perfect-forwarding

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

标签 统计

c++ ×3

aggregate ×1

c++20 ×1

constexpr ×1

perfect-forwarding ×1