在Rvalue References的简介中,提出了完美转发作为将rvalue 5转发到具有非const引用参数的构造函数的理想解决方案.
但:
#include <memory>
#include <iostream>
#include <utility>
template <class T, class A1>
std::shared_ptr<T> factory(A1&& a1) {
return std::shared_ptr<T>(new T(std::forward<A1>(a1)));
}
class X {
public:
X(int& i){
std::cout<<"X("<<i<<")\n";
}
};
int main() {
std::shared_ptr<X> p = factory<X>(5);
}
Run Code Online (Sandbox Code Playgroud)
在XCode 4.2和G ++ 4.6.1中失败no known conversion from int to int&,而:
template <class T, class A1>
std::shared_ptr<T> factory(A1&& a1) {
return std::shared_ptr<T>(new T(/*no forwarding*/a1));
}
Run Code Online (Sandbox Code Playgroud)
编译.我弄错了什么?
班级参考说:
如果使用标准init方法初始化UITableViewController对象,则会创建普通样式的表视图.
我不明白,这种行为来自哪里 - 我希望在某些代码或api中看到我
UITableViewController在其api中没有init
一些基类'init如何知道派生类的合适默认样式?
谢谢你的每一个提示
是否有可能在std中扩展扣除规则?
#include <vector>
#include <array>
namespace std {
template< class T, size_t N >
vector(array<T, N>&) -> vector<T>;
}
int main() {
std::array a = {2,3,5,7}; // array<int, 4> !
std::vector w(a);
}
Run Code Online (Sandbox Code Playgroud)
g ++ 10.0(wandbox)似乎忽略了我的版本。
根据clang9.0(也是Wandbox)在隐藏空间中的预定义规则liv:错误:推导指南必须在与模板'std :: __ 1 :: vector'相同的范围内声明
从iOS编程课程(cs193p fall2010)学习一些示例代码我遇到了sbjson框架,该框架通过名为SBJSON的类别扩展了NSObject等.但在+标题"NSObject + SBJSON.h"中,它读作:
@interface NSObject (NSObject_SBJSON)
Run Code Online (Sandbox Code Playgroud)
NSObject_SBJSON到SBJSON的魔术映射来自哪里?我注意到xcode在下划线之前接受了任何字符串!
但没有发现任何暗示.
thanx klaus