小编Lea*_*ics的帖子

为什么默认构造函数在类外部或类内部会对类是否为 POD 产生影响?

下面的代码中,为什么POD被认为是POD,而notPOD被认为不是POD呢?它们之间的唯一区别是默认构造函数的定义是放在类内部还是外部。我一直认为两者做同样的事情,但事实显然并非如此。

#include <iostream>
struct POD {
    POD() = default;
};
struct notPOD {
    notPOD();
};
notPOD::notPOD() = default;
int main() {
    std::cout << std::boolalpha << std::is_pod<POD>() << ' ' << std::is_pod<notPOD>() << '\n';
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

6
推荐指数
1
解决办法
157
查看次数

C++ 语法问题 - 为什么我不能用逗号来分隔不同类型的变量定义

int main() {
  std::cout << 1, std::cout << 2;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码片段在语法上是正确的,因为逗号可用于分隔语句。然而,

int main() {
  int a, std::string b;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会返回一个错误

'b' 之前的预期初始化程序

为什么是这样?在某些情况下我不能使用逗号分隔语句吗?例如在这种情况下定义变量?

c++ syntax

5
推荐指数
1
解决办法
85
查看次数

从属名称与非从属名称

在以下示例中:

template<typename T>
struct MyList {
    typedef std::list<T> type1;
};

template<typename T>
class MyList2 {
    typename MyList<T>::type1 type2;
};
Run Code Online (Sandbox Code Playgroud)

我认为 type1 和 type2 都是依赖名称,因为它们的类型都依赖于模板参数。但是,为什么第一个被认为是非依赖的,因为我可以使用typedef它?

c++ templates

2
推荐指数
1
解决办法
71
查看次数

为什么使用私有继承静态转换 Derived 到 Base 会导致“const Derived”到“const Base”之间的转换?

class Base {
};
class Derived: private Base {
};
int main() {
    Derived d;
    static_cast<Base>(d);
}
Run Code Online (Sandbox Code Playgroud)

我知道由于私有继承,这样的强制转换是一个错误。然而,我感兴趣的是为什么错误消息是:

error: cannot cast 'const Derived' to its private base class 'const Base'
Run Code Online (Sandbox Code Playgroud)

特别是,为什么它不将“Derived”转换为“Base”?为什么这里有一个const?提前致谢。

c++ downcast

1
推荐指数
1
解决办法
67
查看次数

标签 统计

c++ ×4

c++11 ×1

downcast ×1

syntax ×1

templates ×1