在我的代码中,我实现了这些类:
class A
{
public:
virtual int fun() { return 0; }
}
class B : public A
{
public:
virtual int fun() { return 1; }
}
Run Code Online (Sandbox Code Playgroud)
而这些功能:
void operation(A a)
{
printf("%d\n",a.fun());
}
int main()
{
B b;
operation(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,B类继承了A,并实现了虚拟继承方法fun().主类调用一个函数,该函数接受A in参数并调用该fun()方法,并在参数中使用B对象.
在执行时,我希望"1"打印字符串,但就是"0"这样(即使它是传递给B的B对象operation()).
我需要这样做,因为我有几个B类(B1,B2等...),我希望该函数operation()是通用的.我不需要operation()在类A中实现,但如果我声明operation()纯虚拟,则编译失败operation()说我无法实例化A(这是非常期待的).
我发现很多话题都讨论了父/子方法调用和继承,但没有一个人准确地讨论过这个问题.
有人能帮我吗 ?
谢谢.
我想知道,在以下代码中:
{
int i = 42;
goto end;
}
end:
Run Code Online (Sandbox Code Playgroud)
当我们到达终点时,符号i的状态是什么:(我们在调试器中会看到什么)?它是否仍然存在,即使我们超出了范围?是否存在标准行为或是否依赖于编译器?
为了示例,我们假设代码是使用带有调试符号的gcc编译的.
辅助地,C++中的行为是一样的吗?
谢谢.
问题出在这里:在我正在进行的项目中,禁止使用标签,我们只被告知要使用空格.但有时,我最终编辑了一个遗留源文件,其中包含缩进和代码对齐的选项卡.
使用选项卡的代码示例(选项卡字符显示为"| >>>"):
|>>>int a =||>>>|>>>0;
|>>>int foobar =|>>>10;
|>>>int toto =|>|>>>4;
Run Code Online (Sandbox Code Playgroud)
这是一个示例,但您必须考虑整个文件已满,以至于无法手动纠正.
我通常做一个像这样的简单搜索替换来替换制表空间:
:%s/\t/ /g
Run Code Online (Sandbox Code Playgroud)
但代码最终会像这样:
int a = 0;
int foobar = 10;
int toto = 4;
Run Code Online (Sandbox Code Playgroud)
所有的价值都没有对齐.
我想要的是一个可以删除无用空间而不是缩进的命令,以获得这样的东西:
int a = 0;
int foobar = 10;
int toto = 4;
Run Code Online (Sandbox Code Playgroud)
也就是说,除了缩进之外,每组2+空格必须减少到只有1个空格.
cppref上指出
如果 或
dest是src无效指针或空指针,则行为未定义,即使count为零
memset和也有同样的规定memmove。
我的问题是:标准中哪里有规定?我需要向我的客户证明这是一个 UB,但是指向 cppref 文章的链接不行,我需要标准中的参考。