小编Des*_*tor的帖子

为什么我必须通过this指针访问模板基类成员?

如果下面的类不是模板,我可以简单地xderived课堂上.但是,使用下面的代码,我必须使用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++ inheritance templates c++-faq

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

以下短语在C++中的含义是什么:零,默认和值初始化?

以下短语在C++中的含义是什么:

  • 零初始化,

  • 默认初始化,和

  • 值初始化

C++开发人员应该了解他们什么?

c++ initialization c++-faq

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

在运行时可以检测到C++ 03和C++ 11之间有什么区别?

可以编写一个函数,当用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)

c++ language-detection c++11 c++03

116
推荐指数
8
解决办法
7388
查看次数

具有名为main的全局变量而不是main函数的程序如何工作?

考虑以下计划:

#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选项,但该程序仍然编译并运行.

c++ program-entry-point language-lawyer

97
推荐指数
5
解决办法
9849
查看次数

使用std :: addressof()函数模板而不是在C++中使用operator&是否有任何优势?

如果addressof operator&运行良好,那么为什么C++引入了addressof()函数?该&运营商从一开始的C++部分-为什么推出这个新功能呢?它是否比C的&运营商具有任何优势?

c++

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

为什么这个无效的代码在g ++ 6.0上成功编译?

考虑这个奇怪的程序:

int main()
{
    int(*){} Is it C++14 or any other language?
}
Run Code Online (Sandbox Code Playgroud)

(在这里这里观看现场演示.)

即使//缺少注释,即使我-pedantic-errors在g ++ 6.0中使用选项,代码编译也没有任何错误和警告.这对我来说似乎是一个编译器错误.它真的是编译器中的错误吗?

c++ g++

84
推荐指数
2
解决办法
3485
查看次数

是否定义了减去两个NULL指针的行为?

是否定义了两个非void指针变量(根据C99和/或C++ 98)的差异NULL

例如,假设我有一个如下所示的缓冲区结构:

struct buf {
  char *buf;
  char *pwrite;
  char *pread;
} ex;
Run Code Online (Sandbox Code Playgroud)

比如说,ex.buf指向一个数组或一些malloc的内存.如果我的代码始终保证pwritepread点阵列中或一个过去,然后我相当有信心,ex.pwrite - ex.pread总是被定义.但是,如果pwritepread都是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 c++ c99 c89

75
推荐指数
3
解决办法
2918
查看次数

性能问题:Java与C++

我一直听说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++ java algorithm performance

68
推荐指数
4
解决办法
1万
查看次数

字符串文字的C++比较

我是一个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,但连续执行我得到一个不同的答案?

c++ string-literals

62
推荐指数
5
解决办法
3231
查看次数

为什么无符号整数容易出错?

我正在看这个视频.Bjarne Stroustrup无符号整数容易出错并导致错误.所以,你应该只在你真正需要的时候使用它们.我还读过有关Stack Overflow的问题之一(但我不记得哪一个)使用无符号整数会导致安全漏洞.

它们如何导致安全漏洞?有人可以通过给出一个合适的例子来清楚地解释它

c++ unsigned-integer

60
推荐指数
5
解决办法
6503
查看次数