我有以下类似的功能:
我打算在我的应用程序中随处使用它们,即使在不同的线程中也是如此。
我想知道这些字符串的生命周期,也就是说,是否可以安全地在函数`get_message`之外使用这些`const char*`字符串。
我猜一个硬编码的`const char*`字符串将会被编译到应用程序的代码段而不是数据段中,所以也许可以安全地像上面那样使用它们?
const char* get_message() {
return "This is a constant message, will NOT change forever!";
};
const char* get_message2() {
return "message2";
};
我打算在我的应用程序中随处使用它们,即使在不同的线程中也是如此。
我想知道这些字符串的生命周期,也就是说,是否可以安全地在函数`get_message`之外使用这些`const char*`字符串。
我猜一个硬编码的`const char*`字符串将会被编译到应用程序的代码段而不是数据段中,所以也许可以安全地像上面那样使用它们?
const char *
也可以指向非字面字符串,而这些字符串的生命周期取决于它们所指向的内容。 - undefinedconst char [N]
,而不是const char *
。 - undefinedauto&
而不是const char*
,以避免不必要地丢失类型信息。这样做还可以使需要已知大小数组的函数更加满意,并且如果需要的话,您可以在返回的C字符串上使用基于范围的for循环。示例 - undefinedstd::string
。这样就可以避免生命周期的问题。当然,也有例外情况(就像任何严格的规则一样),在某些情况下使用std::string_view
可能是更好的选择,但如果只使用std::string
,就不会出错。 - undefinedstd::vector
、std::string
)和智能指针(如std::unique_ptr
和std::shared_ptr
)。所有这些类型都有助于描述对象的生命周期。你的常量对象最好使用std::string_view
来建模,并且可以使用std::string
来更改消息。 - undefined