带[[maybe_unused]]的未使用对象构造优化会阻止异常抛出吗?
关于未使用对象构造是否会被编译器优化的问题
先看你给出的代码:
void check_portvalue(std::string_view value) { [[maybe_unused]] port_t test {value}; }
结论很明确:编译器绝对不会优化掉这个构造语句,原因如下:
- C++标准对编译器的优化行为有严格限制:只有当一段代码完全没有可观察的副作用时,编译器才有权将其省略。而构造函数抛出异常属于典型的“可观察副作用”——一旦构造失败抛出异常,程序的执行流会直接转向异常处理逻辑,这是编译器不能忽略的行为。
[[maybe_unused]]只是用来抑制“变量未被使用”的编译器警告,它本质上是给编译器的一个“提示”,而非授权它跳过有实际作用的代码。这个属性完全不影响编译器对代码副作用的判断。- 退一步说,只有当
port_t的构造函数是平凡构造(比如没有自定义逻辑、不会抛异常、不涉及资源分配等)时,编译器才可能优化掉变量的创建,但你的场景中构造函数会抛出异常,显然不符合这个前提。
内容的提问来源于stack exchange,提问作者Tootsie
相关产品推荐
相关产品推荐

