草庐IT

auto-links

全部标签

c++ - 为什么 unique_ptr 对 auto_ptr 有重载?

我遇到编译器错误并注意到一些有趣的事情。出于某种原因,unique_ptr对auto_ptr有重载,但我认为auto_ptr已被弃用:/usr/local/include/c++/4.9.0/bits/unique_ptr.h:228:2:note:templatestd::unique_ptr::unique_ptr(std::auto_ptr&&)unique_ptr(auto_ptr&&__u)noexcept;/usr/local/include/c++/4.9.0/bits/unique_ptr.h:228:2:note:templateargumentdeduction/s

c++ - inline static auto 的 Initializer "sizeof(T)"...是否需要实例化?

如果表达式的类型不相关,但我们用它来初始化静态自动变量,会发生什么?GCC和Clang的行为不同templatestructA{staticinlineautox=sizeof(T{}.f);};Aa;GCC不会引发错误。但是Clang认为这是无效的,因为它实例化了“sizeof”的操作数。GCC似乎跳过了该步骤,因为sizeof(T{}.f)始终具有类型size_t(不依赖于类型),因此它已经知道x没有实例化。如果我们引用x,例如(void)a.x;,两个编译器都会拒绝该程序。它甚至必须解析x的类型吗?如果我没记错的话,C++14以上的语言允许使用“占位符类型”保留事物(如函数)并进

C++11 Xcode 5 : linking error

在Xcode5上进行cocos2d-x2.2.0开发。试图让C++11工作,但出现了一些链接错误。非常感谢任何建议。项目在github.下面是C++11配置(stackoverflowreference)。除了默认库之外,我还链接了libstdc++.6.0.9.dylib和libz.dylib库。错误构建日志为here. 最佳答案 在我将目标更改为我的设备而不是模拟器之后。它刚刚起作用。谁能解释一下?====更新====(11-08-2013)我还像项目一样将cocos2dx目标语言设置配置为c++11,并且仅针对coco2dx目

c++ - 使用可变参数模板制作类似元组的编译时 "linked-list"

我在考虑std::tuple的可能实现方式(以及任何类似的模板类,在编译时定义了可变数量的“成员”),我认为也许可以创建一个类似于链表的“递归类型”。我尝试编译以下测试用例:templateclassTupleLite{public:FirstTypetype_;TupleLiteother_types_;};intmain(){TupleLitemytuple;}类本身编译没有错误,但实例化抛出错误wrongnumberoftemplatearguments(0,shouldbe1ormore).我相信这是因为TupleLite尝试实例化TupleLite,它试图实例化一个Tuple

c++ - `template <auto>` 和部分类模板特化排序

考虑:#includetemplatestructTag{};templateautotag=Tag{};templatestructSelectorImpl;//1templatestructSelectorImpl...>{};//2template*tag,auto...xs>structSelectorImpl,std::integral_constant...>{};templatestructSelector:SelectorImpl...>{};intmain(){Selector,1,2>{};}gcc和clang都无法编译它,报告SelectorImpl的特化不明确。

c++ - decltype(auto) 函数返回类型不推导 && 类型

如果一个函数返回decltype(auto),它返回一个int&&类型的局部变量,为什么返回类型是int&?如果我将变量转换为它自己的类型,那么返回类型就是我所期望的(int&&)#includenamespace{autoi=5;autoj=5;decltype(auto)foo1(){int&&ret=std::move(i);returnret;}decltype(auto)foo2(){int&&ret=std::move(j);returnstatic_cast(ret);}}intmain(){static_assert(std::is_same_v);static_ass

c++ - C/C++ : how to figure out link flags?

我如何可靠地找出库的链接标志?我总是以谷歌搜索/挖掘手册告终。有没有办法列出可用于链接的库以及名称和/或描述?编辑:Linux系统,GNU构建链,经典。 最佳答案 在大多数Linux系统上,您可以使用pkg-config列出给定库的编译器选项。例如:g++example.cpp$(pkg-config--cflags--libslibpng)成为g++example.cpp-I/usr/include/libpng12-lpng12或者输出稍微复杂一点的例子:$pkg-config--cflags--libsgthread-D_RE

c++ - 我对 N4140 中 [basic.link]/7 的理解是否正确?

VS2015编译并执行以下代码片段没有问题。g++和clang没有链接代码,我认为它们是正确的。#includenamespaceX{voidp(){voidq();//Thisisablockscopedeclarationofthefunctionq()withexternal//linkage(by§3.5/6),whichthenmustbedefinedinnamespaceX,//accordingto§3.5/7,andnotintheglobalnamespace.q();}}voidq(){std::cout 最佳答案

c++ - 尝试包含 '#include <boost/regex.hpp>' 时,我得到 : 1>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc100-mt-gd-1_39.lib'

不知道为什么会这样,我从here下载了库虽然我有一个名为“libboost_regex-vc90-mt-gd-1_39.lib”的库,但我没有一个名为“libboost_regex-vc100-mt-gd-1_39.lib”的库,将vc90重命名为vc100就可以了但我不确定这是否是理想的解决方案?#include"stdafx.h"#include#include#include#defineBOOST_ALL_NO_LIBint_tmain(intargc,_TCHAR*argv[]){boost::arraya;boost::smatchs;getchar();return0;}

c++ - 大 vector 的返回值优化与 auto_ptr

如果我使用auto_ptr作为填充大vector的函数的返回值,这会使该函数成为源函数(它将创建一个内部auto_ptr并在返回非constauto_ptr时移交所有权)。但是,我不能将此函数与STL算法一起使用,因为为了访问数据,我需要取消对auto_ptr的引用。我猜一个很好的例子是大小为N的vector场,每个vector有100个分量。如果N很大,则函数按值或按ref返回每个100个分量vector是不一样的。此外,当我尝试这个非常基本的代码时:classt{public:t(){std::coutautoFun(){returnstd::auto_ptr(newt());}a