gpt4 book ai didi

c++ - C++11 属性是否适用于 g++ 4.7.2?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:48:07 26 4
gpt4 key购买 nike

这是一个小程序:

#include <iostream>
#include <string>
#include <cstdlib>


void Exit_With_Error(std::string const& error_message);

int main(){
Exit_With_Error("Error X occurred.");
return 0;
}

void Exit_With_Error(std::string const& error_message){
std::cerr << error_message << std::endl;
exit(EXIT_FAILURE);
return;
}

如您所见,Exit_With_Error 函数实际上从未返回。我想我会添加一个属性来更好地说明这一点。文档 here , 让我相信它应该是这样的:

#include <iostream>
#include <string>
#include <cstdlib>


[[noreturn]] void Exit_With_Error(std::string const& error_message);

int main(){
Exit_With_Error("Error X occurred.");
return 0;
}

[[noreturn]] void Exit_With_Error(std::string const& error_message){
std::cerr << error_message << std::endl;
exit(EXIT_FAILURE);
return;
}

但是,它不编译:

main.cpp:6:1: error: expected unqualified-id before ‘[’ token
main.cpp: In function ‘int main()’:
main.cpp:9:37: error: ‘Exit_With_Error’ was not declared in this scope
main.cpp: At global scope:
main.cpp:13:1: error: expected unqualified-id before ‘[’ token

不过我还是让它工作了!

#include <iostream>
#include <string>
#include <cstdlib>


__attribute__((noreturn)) void Exit_With_Error(std::string const& error_message);

int main(){
Exit_With_Error("Error X occurred.");
return 0;
}

__attribute__((noreturn)) void Exit_With_Error(std::string const& error_message){
std::cerr << error_message << std::endl;
exit(EXIT_FAILURE);
return;
}

我的问题:如何让 [[attribute]] 语法起作用?我在 gcc 上使用 c++11 标志进行编译。例如,

g++ -std=c++11 -o main main.cpp

但是还是不行。我有 4.7.2 版的编译器。它的工作方式是否正确,还是我应该努力使用更简单的语法?

最佳答案

没有。广义属性直到 4.8 版才在 GCC 中实现这可以在这里看到:
http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
http://gcc.gnu.org/gcc-4.8/cxx0x_status.html

关于c++ - C++11 属性是否适用于 g++ 4.7.2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474651/

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