gcc -Wabi-tag 警告我什么以及我应该如何避免这种情况

问题描述 投票:0回答:1

启用 -Wabi-tag 时,我在尝试返回 std::string (按值)时收到警告。此警告的目的是什么,即忽略它会导致什么危害?

有哪些选项可以避免此警告?我想我可以将

abi
标签添加到我的函数中,但这看起来有点难看,并且可能会通过
codebase
传播(恐怕)。我认为无论如何,使用 C++11+ 应该意味着适当的 ABI。

示例:

#include <string>
#include <iostream>

static
std::string hello() // <- warns here
{
    return "Hello, world";
}

int main()
{
    std::cout << hello() << std::endl;
}

警告显示(是的,我也启用了 -Werror):

 error: ‘std::string hello()’ inherits the "cxx11" ABI tag that ‘std::string’ {aka ‘std::__cxx11::basic_string<char>’} (used in its return type) has [-Werror=abi-tag]
c++11 abi gcc-warning
1个回答
0
投票

来自gcc的文档

abi_tag 属性可以应用于函数、变量或类声明。它修改实体的重整名称以合并标签名称,以便将函数或类与具有不同 ABI 的早期版本区分开;也许该类已更改大小,或者该函数具有不同的返回类型,该返回类型未在损坏的名称中进行编码。

-Wabi-tag 标志可以对不具有其子对象和虚函数使用的所有 ABI 标签的类发出警告;对于代码需要与早期 ABI 共存的用户,使用此选项可以帮助找到所有需要标记的受影响类型。

只有当您链接到由不同版本的 gcc 编译的代码时,您才需要关心这一点。如果您的构建过程是从头开始编译所有内容,那对您来说并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.