以下代码为两者打印出相同的地址a并b使用GCC(未与其他编译器一起测试):
#include <stdio.h>
void show() {
{
static char a[0];
printf("%p\n", a);
}
{
static char b[0];
printf("%p\n", b);
}
}
int main() {
show();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是C标准是否允许多个变量具有相同的地址,或者这只是GCC的扩展?
我有一个类base只包含私有默认构造函数和公共删除的复制构造函数,没有别的.
class base {
private:
base() = default;
public:
base(const base&) = delete;
};
Run Code Online (Sandbox Code Playgroud)
如果我尝试继承base并创建类的实例,derived如下所示,g ++ 4.8.2不会编译我的代码,但VC++ 2013会编译.
class derived : public base {
private:
derived() = default;
};
derived x;
Run Code Online (Sandbox Code Playgroud)
那么,它是g ++或VC++ 2013中的一个错误,只是忽略了什么?
这是完整的代码......
class base {
private:
base() = default;
public:
base(const base&) = delete;
};
class derived : public base {
private:
derived() = default;
};
derived x;
int main() {
}
Run Code Online (Sandbox Code Playgroud)
...和g ++错误消息.
main.cpp:12:5: error: 'constexpr derived::derived()' is private
derived() …Run Code Online (Sandbox Code Playgroud) 可能在 C++ 标准(C++17 或 C++20)中的概念。
所以我想知道这个新功能是否可以完全取代SFINAE,或者它只是一个带有很好的错误报告和类型检查的SFINAE的小版本。
是否有 SFINAE 是唯一选择而不是使用 Concepts 的情况?
当我用g ++ 4.8.2编译下面的代码时,我收到一个错误.
#include <iostream>
using namespace std;
class test {
public:
void print() {
cout << str << endl;
}
private:
char str[] = "123456789"; // error: initializer-string for array of chars
// is too long
};
int main() {
char x[] = "987654321";
cout << x << endl;
test temp;
temp.print();
}
Run Code Online (Sandbox Code Playgroud)
为什么我得到这个错误,是什么样的区别str在课堂上test和x在main功能?