Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
g++;铸造副的警告选项? < >我发现C++没有给出从配对 > 配对>代码>的警告,这有点令人惊讶。这是我的程序测试对.cpp: #include <vector> #include <utility> using namespace std; int main() { std::vector<pair<int, int> > v; pair<double, int> p = make_pair(3.8, 3); v.push_back(p); } #包括 #包括 使用名称空间std; int main() { std::向量v; 配对p=配对(3.8,3); v、 推回(p); }_C++_G++ - Fatal编程技术网

g++;铸造副的警告选项? < >我发现C++没有给出从配对 > 配对>代码>的警告,这有点令人惊讶。这是我的程序测试对.cpp: #include <vector> #include <utility> using namespace std; int main() { std::vector<pair<int, int> > v; pair<double, int> p = make_pair(3.8, 3); v.push_back(p); } #包括 #包括 使用名称空间std; int main() { std::向量v; 配对p=配对(3.8,3); v、 推回(p); }

g++;铸造副的警告选项? < >我发现C++没有给出从配对 > 配对>代码>的警告,这有点令人惊讶。这是我的程序测试对.cpp: #include <vector> #include <utility> using namespace std; int main() { std::vector<pair<int, int> > v; pair<double, int> p = make_pair(3.8, 3); v.push_back(p); } #包括 #包括 使用名称空间std; int main() { std::向量v; 配对p=配对(3.8,3); v、 推回(p); },c++,g++,C++,G++,我使用g++test\u type.cpp-Wall-Wconversion编译它,但仍然没有生成任何警告。我使用的是g++v4.6.1。有没有人知道如何让g++为此生成警告,或者这是无法做到的?对(和元组)几乎可以用任何合适的东西构造。特别是,每个元素都可以由隐式转换为它的任何元素构造而成。基本上,它“做你所期望的”。对的构造函数模板如下所示: template <typename U, typename V> pair(U && u, V && v

我使用
g++test\u type.cpp-Wall-Wconversion
编译它,但仍然没有生成任何警告。我使用的是g++v4.6.1。有没有人知道如何让g++为此生成警告,或者这是无法做到的?

对(和元组)几乎可以用任何合适的东西构造。特别是,每个元素都可以由隐式转换为它的任何元素构造而成。基本上,它“做你所期望的”。
的构造函数模板如下所示:

template <typename U, typename V>
pair(U && u, V && v) : first(std::forward<U>(u)), second(std::forward<V>(v))
{ }

这个符号是什么?我不熟悉它:
v.push_back({p})。很抱歉,我试图使用C++11功能,我应该删除括号。+1,但有一个问题,它们可以从隐式可转换的任何东西构造,而不仅仅是可转换的。这是很长一段时间以来的标准措辞(C++03,不确定C++98),即使使用C++03,该限制无法实现。v.emplace_back(3.8,3)仍然不会生成任何警告。但是谢谢你的解释。我认为这个隐式的强制转换特性可能有点令人困惑。这个例子的相关构造函数实际上是
templatepair(constpair&p)@leftaroundabout but std::pair p{3.8,3};也在没有警告的情况下编译。在这种特殊情况下,缩小转换范围是允许的。@KerrekSB:你能更具体地说一下怎么做吗?顺便说一句,我尝试了-Wconversion,但运气不好。
v.emplace_back(3.8, 3);