我有字符串常量,用于我在应用程序中多个位置使用的字符串:
namespace Common{
static const std::string mystring = "IamAwesum";
}
发布有关其他内容的问题(编译期间未包含在目标中的.h文件会发生什么情况?)时,另一位用户发表了以下评论:
请注意,在这种情况下,您的静态字符串是全局的。因此它们可以随时创建异常并且无法捕获。我建议您使用返回字符串引用的函数。std :: string const&mystring {静态std :: string const mystring =“ IamAwesum”; 通过这种方式返回mystring},只有在需要时才构造您的对象
有人可以解释为什么以我上面的方式使用静态const字符串会引发异常吗?
N4140§3.6.2 [basic.start.init] / 4
由实现定义,是否在的第一条语句之前对具有静态存储持续时间的非局部变量进行动态初始化
main
。
N4140§N4140 15.3 [手柄除外] / 13
在具有静态存储持续时间的对象的析构函数中或在具有静态存储持续时间的命名空间范围对象的构造函数中引发的异常不会被on 的function-try-block捕获
main()
。
您根本无法捕获由字符串的构造函数生成的异常-例如,std::bad_alloc
。
话虽如此,对于这么小的弦,我发现这种考虑是偏执的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句