gpt4 book ai didi

c++ - 关于表达式副作用的 Clang 警告

转载 作者:可可西里 更新时间:2023-11-01 16:13:51 29 4
gpt4 key购买 nike

给定以下源代码:

#include <memory>
#include <typeinfo>

struct Base {
virtual ~Base();
};

struct Derived : Base { };

int main() {
std::unique_ptr<Base> ptr_foo = std::make_unique<Derived>();

typeid(*ptr_foo).name();

return 0;
}

并编译它:

clang++ -std=c++14 -Wall -Wextra -Werror -Wpedantic -g -o test test.cpp

环境设置:

linux x86_64
clang version 5.0.0

由于警告(注意 -Werror),它无法编译:

error: expression with side effects will be evaluated
despite being used as an operand to 'typeid'
[-Werror,-Wpotentially-evaluated-expression]
typeid(*ptr_foo).name();

(请注意:GCC 不声明那种潜在的问题)


问题

有没有办法在不生成那种警告的情况下获取有关 unique_ptr 指向的类型的信息?

注意:我不是谈论禁用-Wpotentially-evaluated-expression或避免-Werror

最佳答案

看起来下面应该在没有警告的情况下工作,并为派生类给出正确的结果

std::unique_ptr<Foo> ptr_foo = std::make_unique<Bar>();

if(ptr_foo.get()){
auto& r = *ptr_foo.get();
std::cout << typeid(r).name() << '\n';
}

关于c++ - 关于表达式副作用的 Clang 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46494928/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com