小编ste*_*wer的帖子

内置类型的成员是否默认初始化?

我最近遇到了我的一个类的问题,因为我没有在构造函数初始化列表中设置指向NULL的指针,所以当我运行程序时它包含垃圾.

然而,虽然我知道在堆栈上声明但未初始化的内置类型的实例将包含随机值,但我很确定我会读到某处,因为未在构造函数初始化列表中明确放置的类成员将具有其默认值对于内置类型调用的构造函数,这也会发生,在大多数平台上插入像伪构造函数一样的代码,将它们设置为零我还认为我在某些情况下在某些情况下读到了"在C++中思考"构造对象的内存将被清零,但在两种情况下我似乎都是错误的.

请有人确认一下,
a)内置类型成员的初始化与是否定义了用户定义的构造函数有关,
b)是否需要初始化内置类型的成员手动,和
c)是否有任何情况下,在调用构造函数之前,对象的存储被清零?

此外,在研究这个问题时,我已经看到使用了"默认初始化"和"零初始化"这两个术语 - 说:

T a;
Run Code Online (Sandbox Code Playgroud)

T a();
Run Code Online (Sandbox Code Playgroud)

?我认为第一种形式只是用来防止歧义,当第二种形式可以被编译器作为函数声明.

非常感谢您的宝贵时间,

stellarpower

c++ constructor primitive-types

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

fmt 库 - 格式化为(编译时)string_view

我想使用 fmt 库从我的格式参数创建 string_view 。有很多关于传递编译时字符串作为格式字符串的文档,但是,我想输出编译时字符串,以便我可以在代码的其他静态部分中使用它。有没有办法做到这一点?到目前为止,我见过的所有函数都返回一个std::string; 我也尝试过format_to,但似乎对 string_view 迭代器显式禁用(我假设它无论如何都无法在编译时工作,因为它正在变异)。这可能很简单,我只是找错了地方,我不知道。

我希望能够做类似以下的事情:

consteval std::string_view example(unsigned i){
    return fmt::something<std::string_view>("You sent {}"sv, i);
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这个库似乎提供了我需要的东西,但是,避免第二个依赖将是有利的。

c++ string-formatting compile-time string-view fmt

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