int main(int, char const* const*) 格式良好
Is int main(int, char const* const*) well formed?
根据C++11标准,以下程序是否格式良好且可移植C++?
int main(int argc, char const* const* argv) {}
No.在纯可移植C++程序中,argv
参数(如果存在)没有const
修饰符。
编辑:见C++11标准草案第3.6.1.2节,其中(在我面前的版本中)指出:
实现不应预定义主函数。此函数 不得超载。它应具有 int 类型的返回类型,但 否则,其类型是实现定义的。所有实现 应允许以下两个主要定义:
int main(){ /*...*/ }
和
int main(int argc, char* argv[]) { /* ... */ }
取决于你所说的便携式是什么意思。邪恶的C++实现可能会拒绝它,理由是它的签名int(int,char const*const*)
不同于所需的允许签名之一,int()
和int(int,char**)
。(一个邪恶的实现似乎可以拒绝auto main(int argc,char* argv[]) -> int
,或者实际上,拒绝任何身体不{ /* ... */ }
的main
定义)
但是,这不是典型的。我不知道有任何实现添加 const 会导致调用 main
时出现问题,并且由于 C++11 添加了有关"相似"类型的位,因此在通过 char const * const *
变量访问char**
对象时,您不会违反严格的别名规则。
因此,虽然一个符合标准的实现在技术上可以拒绝它,但我认为它可以移植到你可能想要使用的任何实现中。
相关文章:
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 在C++中,如果"int a = 3; int* p = &a;",那么为什么不允许"const int* &pp = p",但允许"const int* const &pp = p"?
- 调用'myStud::myStud(int, const char [5], int, int, int)'没有匹配函数
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- int(int)& 或 int(int) const &是什么类型?
- 传递 const int* 和 int* 时调用重载函数的不同版本(const int* const&/&&)
- 如何在构造函数中初始化int const * const
- 对"displayForStudent(int, int const*, double const*, int)"的未定义引用 collect2.exe:错误:ld 返回 1 个退出状态
- 如何在 C++ 中解释"const int *const & variable"
- 为什么"int & const" MSVC 编译得很好?
- const int const&和const int&in C++有什么区别?
- std::set<int * const> 不会编译
- " invalid operands of types 'int' and 'int* const'" 来自功能的错误,来自书
- std::initializer_list<int const> 不能从 std::initializer_list <int>构造
- 对'std::string Helper::ToString<int>(int const&)'的未定义引用
- 无法弄清楚 int[3][3] 和 int(* const)[3] 之间的区别
- const int* const fun(const int* const& p) const的含义;
- 为什么vector<int * const>是非法/不合逻辑的?
- 对 Stack<int>::p ush(int const&) 的未定义引用
- JsonCpp:未定义的对"Json::Value::operator[](int) const"的引用