参见英文答案 > About C++ classes with self reference 2个 标准中有哪些具体内容?我发现§9.2/ 10:非静态(9.4)数据成员不应具有不完整的类型.特别是,类C不应包含类C的非静态成员,但它可以包含指向C类对象的指针或引用,但这似乎并不直接支持手头的问题. #include <iost
我有以下基本代码: struct X {
X(const char* descr) {...}
~X() {...} // Not virtual
virtual void foo() const {...}
};
struct Y : public X {
Y(const char* descr) {...}
~Y() {...} // Not virtual
virt
阅读C 11草案我对第1.7.3条感兴趣: A memory location is either an object of scalar type or a maximal sequence of adjacent bit-fields all having non-zero width. … Two threads of execution (1.10) can update and acce
在我的课上,我有一个成员变量std :: vector< node *>孩子 以下类成员函数是否会创建内存泄漏? //adds a child node
{
node* child = new node("blah","blah","blah");
child->Set_Parent(this);
children.push_back(child); //<- Is th
我所需要的只是知道某些东西是否存在以及它存在多少次.我将迭代现有的东西并查询其中存在多少. 到目前为止我的实现使用multiset,我做如下: std::multiset<thing> a;
auto previous = a.end();
for( auto each = a.begin(); each != a.end(); ++each ) {
if( previous == a.e
我正在实现一个具有代理迭代器/引用类型的容器,类似于std :: vector< bool>并冲突到下面的问题,我继续举例说明std :: vector< bool> (这个问题不是关于std :: vector< bool>!): #include <vector>
#include <type_traits>
int main() {
using namespace std;
vect
我有一个包含矢量的模板类.我试图在这个类中存储unique_ptrs,它工作正常.但是,当我将void add(const T& elem)函数标记为虚拟时,我的编译器(clang)告诉我,我正在为unique_ptr进行“调用隐式删除的复制构造函数”. 我知道unique_ptrs无法复制,因此我创建了void add(T&& elem)函数.我只是不知道为什么将其他添加函数标记为虚拟导致编译器
我在C中发现了令人讨厌的东西,我不知道是否有一个技巧可以避免这种情况而没有开销.问题如下: 对于模板功能,我们可以: // Function declaration/definition
template<bool Option = false> void myFunction()
{
std::cout<<"Option = "<<Option<<std::endl;
}
// Th
从N3337的[12.8] [11]开始: The implicitly-defined copy/move constructor for a non-union class X performs a memberwise copy/move of its bases and members. [ Note: brace-or-equal-initializers of non-static d
我理解,当从函数返回值的对象时,会调用它们的复制构造函数.如果类具有已删除的复制构造函数,则按值返回将失败. struct X {
X(const X &) = delete;
};
X f() {
return X{};
} error: call to deleted constructor of 'X' C 11为我们提供了扩展初始化器.我在SO帖子的某个地方读到了这个 X
以下代码将构造函数从base转发为派生类. 为什么2个复制构造函数调用?在后台发生了什么? 用g编译. #include <iostream>
using namespace std;
struct A {
A() { cout << "A" << endl; }
A(const A&) { cout << "A(const A&)" << endl; }
templat
对于标准的拷贝构造函数和赋值运算符,如果我的类实现了析构函数,我总是考虑实现它们或删除缺省的缺省值. 对于新移动构造函数和移动运算符,考虑是否需要实现的正确方法是什么? 作为从前C 0x转换系统的第一步,我可以删除默认的移动构造函数并移动运算符,还是应该让它们单独存在? 您无需担心它,因为当您用户声明析构函数(或12.8 / 9中列出的任何其他内容)时,会阻止生成默认移动构造函数.因此,与副本的风
鉴于§3.5/ 4中的以下语句(强调我的)和§7.3.1.1/ 1中的注释[94],我想在一个具有外部链接的未命名命名空间中声明的实体的一个单独示例. §3.5/ 4 An unnamed namespace or a namespace declared directly or indirectly within an unnamed namespace has internal linkage
考虑以下程序: #include <iostream>
int main()
{
int x = 0;
const int* px = new (&x) const int(0);
x = 1;
std::cout << *px; // 1?
} 它compiles under GCC 4.8(并产生“预期的”输出),但我怀疑它完全是UB,因为动态对象的类型为const
是否可以强制std :: make_shared使用类的new运算符?这与另一个 SO question有关.根据那个问题,std :: make_shared使用自定义分配器: From the standard (§20.7.2.2.6 shared_ptr creation ): Effects: Allocates memory suitable for an object of type
由于c提供对rvalues的引用,即rvalue引用,其主要用于执行移动语义和其他存储器有效任务.但是在下面的例子中,引用是改变文字的值,但是我们知道文字是只读的,所以引用如何改变某些只读变量的值.右值引用是否分配了它自己的内存,或者它只是更改了文字的值? #include <iostream>
using namespace std;
int main()
{
int a = 5;
假设我有一个模板函数(例如,foo),它返回一个const依赖类型.将返回类型限定为const的选项是将const放在typename关键字的左侧: template<typename T>
const typename T::bar
^^^^^
foo(T const& baz) {
...
} 或在依赖类型的右侧: template<typename T>
typename T::bar
我有一个表示一个树对象的类,它使用唯一的指针,构成树的一些节点,以及一个基于一些参数构造指向抽象节点类的指针的函数(它生成指向子类的指针,因为抽象节点是抽象的) class AbstractNode
{
vector<unique_ptr<AbstractNode>> children;
public:
AbstractNode(arguments...);
// othe
我使用wxwidget库,我有以下问题: #if defined(HAVE_TYPE_TRAITS)
#include <type_traits>
#elif defined(HAVE_TR1_TYPE_TRAITS)
#ifdef __VISUALC__
#include <type_traits>
#else
#include <tr1/
使用C 11中的{}初始化程序初始化bool b = {2}会产生以下警告消息: warning: narrowing conversion of ‘2’ from ‘int’ to ‘bool’ inside { } [-Wnarrowing] 但是,使用旧式bool b = 2没有这样的问题.这背后的原因是什么? 更新:我使用g -std = c 11编译了代码,它给了我警告.如果我添加选项-