相关疑难解决方法(0)

为什么不能推断出主要的返回类型?

正如预期的那样,C++ 11中的以下内容失败,因为该语言没有bog标准函数的返回类型推导:

auto main()
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,C++ 14确实如此,所以我无法解释以下错误(在GCC trunk,clang 3.8和Visual Studio 2015中具有相同的结果):

error: 'main' must return 'int'
Run Code Online (Sandbox Code Playgroud)

我没有看到标准中的一个段落,禁止返回类型扣除main?或者两个编译器都不兼容?

(对于它的价值,我永远不会真的这样做.int main()为了胜利......)

c++ return-type-deduction c++14

32
推荐指数
3
解决办法
1860
查看次数

C++中main()的法律定义14

关于main()[3.6.1] ,我能够找到的C++ 14的最后一个草案说:

实现不应预定义主函数.此功能不应过载.它应该具有int类型的返回类型,否则其类型是实现定义的.所有实现都应允许两者

- 返回int和的函数()

- 返回int的函数(int,指向char的指针)

及(第5段)

如果控制到达main的末尾而没有遇到return语句,则效果就是执行

return 0;

这是否意味着以下所有内容都是合法的C++ 14最小程序?如果没有,为什么不呢?

  1. auto main() -> int {}
  2. auto main() { return 0; }
  3. auto main() {}

c++ program-entry-point language-lawyer c++14

22
推荐指数
1
解决办法
1586
查看次数

如何解决模板参数推导中的const/non-const冲突

我有一个函数模板,它取一个std::pair对的类型之一的值.我想使用a std::map作为pair参数的条目来调用此函数.

#include <map>
#include <utility>

template <typename T1, typename T2>
void do_stuff(std::pair<T1, T2> const &pair, T1 const &val) {
  // Imagine that this does something important...
}

int main() {
  std::map<int, float> foo { { 0, 0.0 } };

  do_stuff(*foo.begin(), 0);
}
Run Code Online (Sandbox Code Playgroud)

这无法编译,因为地图条目std::pair<const int, float>的类型是,因此类型推导T1具有冲突类型:const int通过pair参数,并int通过val参数.

test.cc: In function ‘int main()’:
test.cc:12:27: error: no matching function for call to ‘do_stuff(std::pair<const int, float>&, int)’
   do_stuff(*foo.begin(), …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11 type-deduction c++14

5
推荐指数
1
解决办法
623
查看次数