注意:答案是按照特定的顺序给出的,但由于许多用户根据投票而不是给出的时间对答案进行排序,因此这里是答案的索引,它们是最有意义的顺序:
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
在完美转发中,std::forward
用于转换命名的右值引用t1
和t2
未命名的右值引用.这样做的目的是什么?inner
如果我们离开t1
&t2
作为左值,那将如何影响被调用的函数?
template <typename T1, typename T2>
void outer(T1&& t1, T2&& t2)
{
inner(std::forward<T1>(t1), std::forward<T2>(t2));
}
Run Code Online (Sandbox Code Playgroud) 即将从其他C来源的语言(如Java或C#)到C++,它是第一个非常混乱的是C++有三种方式来引用类的成员:a::b
,a.b
,和a->b
.我什么时候使用这些运营商中的哪一个?
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
好吧,所以我最后一次以C++为生,std::auto_ptr
所有的std lib都可用,而且boost::shared_ptr
风靡一时.我从未真正研究过提供的其他智能指针类型.我知道C++ 11现在提供了一些类型的提升,但不是全部.
那么有人有一个简单的算法来确定何时使用哪个智能指针?优选地包括关于哑指针(诸如原始指针T*
)和其他增强智能指针的建议.(像这样的东西会很棒).
我想这样做:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
Run Code Online (Sandbox Code Playgroud)
但我不能因为something_relevant
不是整体类型.它不依赖于T
,但现有代码依赖于它是静态成员S
.
由于S是模板,我不能将定义放在编译文件中.我该如何解决这个问题?
有哪些一般提示可以确保我不会在C++程序中泄漏内存?我如何确定谁应该释放已动态分配的内存?
据我所知大多数运算符重载,与成员访问运营商外->
,.*
,->*
等.
特别是,传递给这些操作符函数的内容以及应返回的内容是什么?
操作员如何运作(例如operator->(...)
)知道所指的成员是什么?可以知道吗?它甚至需要知道吗?
最后,是否需要考虑常见因素?例如,当重载类似的东西时operator[]
,通常你需要const和非const版本.成员访问运算符是否需要const和非const版本?
std::swap()
在排序甚至分配期间被许多std容器(例如std::list
和std::vector
)使用.
但是std实现swap()
非常普遍,而且对于自定义类型来说效率很低.
因此,通过std::swap()
使用自定义类型特定实现进行重载可以获得效率.但是如何实现它以便std容器使用它?
自复制构造函数
MyClass(const MyClass&);
Run Code Online (Sandbox Code Playgroud)
和=运算符重载
MyClass& operator = (const MyClass&);
Run Code Online (Sandbox Code Playgroud)
有几乎相同的代码,相同的参数,只有不同的返回,是否有可能有一个共同的功能,他们都使用?