gpt4 book ai didi

c++ - 我们可以在 main 的参数中添加 CV 限定符吗?

转载 作者:太空狗 更新时间:2023-10-29 20:10:39 25 4
gpt4 key购买 nike

据我所知,在 C 或 C++ 中,main 的签名应该是 int main(void)(void 是在 C++ 中可选)或 int main(int, char**)。但是,以下代码在 gcc/g++/clang/clang++ 中编译时没有警告 (-Wall -Wextra -Wpedantic)

int main(int, const char * const * const argv){}

Live on Coliru

上面的代码合法吗?换句话说,我们能否将 CV 限定符添加到 main 的参数中,或者这只是不需要诊断的编译器扩展?

最佳答案

C++11 标准允许实现接受它喜欢的任何签名,它只强制要求出现的两个签名。它还必须具有 int 的返回类型。

3.6.1 Main Function [basic.start.main]

2 An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined. All implementations shall allow both of the following definitions of main:

int main() { /* ...
*/ }

and

int main(int argc, char* argv[]) { /* ...
*/ }

所以要解决主要问题:

Can we add CV-qualifiers to the arguments of main?

我们可以如果实现支持它,但如果我们这样做,那么代码不太可能是可移植的。

如果代码将(最多)cv 限定符 添加到参数变量本身,而不是其指向的类型,那么代码将是完全可移植的:

// still portable, same signature as int main(int, char**)
int main(int, char** const argv);

// not portable
int main(int, char* const* argv);

// not portable
int main(int, const char** argv);

关于c++ - 我们可以在 main 的参数中添加 CV 限定符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38195245/

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