小编Dan*_*lKO的帖子

为什么不允许从VirtualBase ::*转换为Derived ::*?

昨天,我和我的同事不确定为什么语言禁止这种转换

struct A { int x; };
struct B : virtual A { };

int A::*p = &A::x;
int B::*pb = p;
Run Code Online (Sandbox Code Playgroud)

甚至演员都没有帮助.如果基本成员指针是虚拟基类,为什么标准不支持将基本成员指针转换为派生成员指针?

相关的C++标准参考:

类型"指向Bcv类型成员的指针"的prvalue T,其中B是类类型,可以转换为类型为"指向Dcv类型成员的指针"的prvalue T,其中D是派生类(第10条)B.如果B不可访问(第11条),模糊(10.2)或虚拟(10.1)基类D,或虚拟基类的基类D,则需要进行此转换的程序是不正确的.

函数和数据成员指针都会受到影响.

c++ virtual-inheritance member-pointers

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

使用点访问匿名枚举值

此代码与GCC和Clang编译(并且似乎有效):

#include <iostream>

struct Foo {
    enum { number = 42 };
};

int main()
{
    Foo bar;
    std::cout << bar.number << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

在这里看到它.

令我惊讶的是,编译器接受了bar.number; 我能找到的所有教科书都可以Foo::number用来访问枚举值.

这段代码有效吗?请注意,GCC给出了一个奇怪的警告("变量'栏'设置但未使用'),而Clang没有抱怨它.

c++

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

需要Meyers有效的C++ Widget rvalue示例说明

我有一个小C++问题.

在Effective Modern C++的第一页上,有一个例子:

class Widget {
public:
    Widget(Widget&& rhs);
};
Run Code Online (Sandbox Code Playgroud)

此外,还有一个评论:'rhs是一个左值,虽然它有一个右值引用类型'.

说实话,我什么都不懂.这是什么意思'rhs是一个左值,但它的类型是右值参考'?

c++ lvalue rvalue-reference c++11

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

什么是函数参数的生命周期(需要引用)?

函数参数的生命周期是否等于作为'rvalue'引用传递的未命名临时值(它等于称为函数的表达式)?我的'gcc'编译器显示它是.但我希望看到一个实际的标准文档也说明它(可能是最新的'C++ 11'或'C++ 14').

c++ standards c++11 c++14

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

如何使用C++中的均值生成随机数?

如何在1,000到20,000之间生成100个随机数,C++中的平均值为9,000?我正在研究C++ 11库,但我找不到允许我包含平均值和范围的方法.

c++ random c++11

3
推荐指数
2
解决办法
907
查看次数