如果下面的类不是模板,我可以简单地x
在derived
课堂上.但是,使用下面的代码,我必须使用this->x
.为什么?
template <typename T>
class base {
protected:
int x;
};
template <typename T>
class derived : public base<T> {
public:
int f() { return this->x; }
};
int main() {
derived<int> d;
d.f();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 以下短语在C++中的含义是什么:
零初始化,
默认初始化,和
值初始化
C++开发人员应该了解他们什么?
可以编写一个函数,当用C编译器编译时它将返回0,并且当用C++编译器编译时,将返回1(微不足道的
#ifdef __cplusplus
情况并不令人感兴趣).
例如:
int isCPP()
{
return sizeof(char) == sizeof 'c';
}
Run Code Online (Sandbox Code Playgroud)
当然,只有在sizeof (char)
不相同的情况下才会起作用sizeof (int)
另一个更便携的解决方案是这样的:
int isCPP()
{
typedef int T;
{
struct T
{
int a[2];
};
return sizeof(T) == sizeof(struct T);
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定这些例子是否100%正确,但你明白了.我相信还有其他方法可以编写相同的功能.
在运行时可以检测到C++ 03和C++ 11之间有什么区别?换句话说,是否有可能编写一个类似的函数,它返回一个布尔值,表明它是由符合标准的C++ 03编译器还是C++ 11编译器编译的?
bool isCpp11()
{
//???
}
Run Code Online (Sandbox Code Playgroud) 考虑以下计划:
#include <iostream>
int main = ( std::cout << "C++ is excellent!\n", 195 );
Run Code Online (Sandbox Code Playgroud)
在Windows 7操作系统上使用g ++ 4.8.1(mingw64),程序编译并运行正常,打印:
C++非常棒!
到控制台.main
似乎是一个全局变量而不是一个函数; 如果没有该功能,该程序如何执行main()
?这段代码是否符合C++标准?程序的行为是否定义明确?我也使用了该-pedantic-errors
选项,但该程序仍然编译并运行.
如果addressof operator&
运行良好,那么为什么C++引入了addressof()
函数?该&
运营商从一开始的C++部分-为什么推出这个新功能呢?它是否比C的&
运营商具有任何优势?
考虑这个奇怪的程序:
int main()
{
int(*){} Is it C++14 or any other language?
}
Run Code Online (Sandbox Code Playgroud)
即使//
缺少注释,即使我-pedantic-errors
在g ++ 6.0中使用选项,代码编译也没有任何错误和警告.这对我来说似乎是一个编译器错误.它真的是编译器中的错误吗?
是否定义了两个非void指针变量(根据C99和/或C++ 98)的差异NULL
?
例如,假设我有一个如下所示的缓冲区结构:
struct buf {
char *buf;
char *pwrite;
char *pread;
} ex;
Run Code Online (Sandbox Code Playgroud)
比如说,ex.buf
指向一个数组或一些malloc的内存.如果我的代码始终保证pwrite
和pread
点阵列中或一个过去,然后我相当有信心,ex.pwrite - ex.pread
总是被定义.但是,如果pwrite
和pread
都是NULL.我可以只期望减去两个定义为(ptrdiff_t)0
或严格兼容的代码需要测试指针为NULL吗?请注意,我感兴趣的唯一情况是两个指针都是NULL(表示缓冲区未初始化的情况).原因在于满足前面的假设,完全符合"可用"功能:
size_t buf_avail(const struct s_buf *b)
{
return b->pwrite - b->pread;
}
Run Code Online (Sandbox Code Playgroud) 我一直听说C++比Java更有效(这就是大多数游戏都是用C++开发的原因).
我写了一个小算法来解决Java和C++中的"八皇后谜题",使用完全相同的算法,然后开始提高数字或方块.当到达20*20甚至22*22的检查板时,看起来Java更有效(3秒对C++的66秒).
我不知道为什么,但我从C++开始,所以我可能会犯一些巨大的性能错误,所以我很乐意接受任何可以帮助我理解正在发生的事情的信息.
下面是我在Java中使用的代码:
import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
public class HuitDames {
/**
* La liste des coordnnées des dames.
*/
private static List<Point> positions = new ArrayList<>();
/**
* Largeur de la grille.
*/
private static final int LARGEUR_GRILLE = 22;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int i = 1;
placerDame(i);
for (Point point : positions) {
System.out.println("(" + point.x + "; " + point.y + ")"); …
Run Code Online (Sandbox Code Playgroud) 我是一个c ++新手(只是oldschool c).我的儿子请求帮助,我无法解释.如果他问我"我如何比较字符串"我会告诉他使用strcmp(),但这并不是让我感到困惑的原因.以下是他的问题:
int main()
{
cout << ("A"< "Z");
}
Run Code Online (Sandbox Code Playgroud)
将打印1
int main()
{
cout << ("Z"< "A");
}
Run Code Online (Sandbox Code Playgroud)
也会打印1,但是
int main()
{
cout << ("Z"< "A");
cout << ("A"< "Z");
}
Run Code Online (Sandbox Code Playgroud)
然后将打印10.单独两个cout语句打印1,但连续执行我得到一个不同的答案?
我正在看这个视频.Bjarne Stroustrup说无符号整数容易出错并导致错误.所以,你应该只在你真正需要的时候使用它们.我还读过有关Stack Overflow的问题之一(但我不记得哪一个)使用无符号整数会导致安全漏洞.
它们如何导致安全漏洞?有人可以通过给出一个合适的例子来清楚地解释它