小编Seb*_*ach的帖子

C++标准库必须用C++实现吗?

  1. 必须在C++中实现符合C++标准库的实现吗?
  2. 如果没有,是否允许做纯粹的C++和标准库中不可行的神奇事物以及一些实现定义的行为?

  • 我知道存在依赖于扩展的并行实现(至少在C++ 11之前),但它们是否真的符合要求?
  • 我在标准中找不到任何要求,但也许我的标准福今天很弱

c++ standards-compliance c++-standard-library

12
推荐指数
2
解决办法
642
查看次数

C++,三元运算符,std :: cout

如何使用C++使用三元运算符编写以下条件

int condition1, condition2, condition3;
int / double result; //int or double
....
std::cout << ( condition1: result1 : "Error" ) 
          << ( condition2: result2 : "Error" )
          << ( condition3: result3 : "Error")...;
Run Code Online (Sandbox Code Playgroud)

c++ printing conditional ternary-operator

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

C++:如何将引用函数传递给另一个函数?

我一直在阅读函数指针以及将它们用作其他函数的参数.我的问题是如何在不使用指针的情况下通过引用传递函数?我一直试图在互联网上找到答案,但我没有找到一个好的答案.我知道您可以通过引用传递变量,如下所示: void funct(int& anInt);.你会如何做与此类似的事情,但是对一个变量的引用而不是对函数的引用是参数?另外,如何在函数体中使用函数的引用?

c++ function pass-by-reference argument-passing

10
推荐指数
1
解决办法
2万
查看次数

条件声明的变量范围

一些重构导致一段代码导致我进入这个最小的测试用例:

int main () {
    if (int i=1) {
        /* IF-BLOCK */
    } else {
        throw i;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译好了.但是,我一直认为这i只是可见的IF-BLOCK,但似乎并非如此.这是编译器错误吗?

另外,为什么以下工作呢?

int main () {
    if (int i=1) {
    } else if (int i=2) {
    } else {
        throw i;
    }
}
Run Code Online (Sandbox Code Playgroud)

注意第二个if"重新声明" i.另一个编译错误?

c++ scope

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

构造函数初始化列表中的约束检查

这种情况与如何对构造函数的参数进行约束有关,但它略有不同.

您想要初始化非默认可构造成员,但需要在构造之前检查约束.

例:

(请注意,这只是一个例子.在这种特定情况下是否应该使用无符号整数是可以讨论的,但问题实际上是关于你想检查构造函数的一般情况)

你有以下课程:

class Buffer {
public:
    Buffer() = delete;
    Buffer(int size) noexcept;
};
....


class RenderTarget {
public:
    ....
private:
    int width_, height_;
    Buffer surface_;
};
Run Code Online (Sandbox Code Playgroud)

构造函数必须检查整数参数的有效性:

RenderTarget::RenderTarget(int width, int height) :
    width_(width), height_(height),
    surface_(width_*height)
{
    if (width_<0 || height_<0)
        throw std::logic_error("Crizzle id boom shackalack");
}
Run Code Online (Sandbox Code Playgroud)

注意如何Buffer没有默认构造函数,而真正的构造函数是noexcept,即没有办法捕获错误.

当整数参数为负数时,已经有一个surface_已经加了.使用约束值之前进行约束检查会更好.可能吗?

c++ initialization constraints initialization-list

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

使用gui和linux下c ++的最佳稳定编辑器和编译器是什么?

什么是最好的稳定(编辑器和编译器)的C++与gui在Linux下工作?

注意:明确没有寻找完整的IDE.

c++ compiler-construction editor

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

启动Mersenne twister PRNG

似乎有一些关于使用mt19937的神话,特别是一旦播种器产生的'某些'位数应该被忽略,以便尽可能接近伪随机性.

我见过的代码示例如下:

boost::mt19937::result_type seed = 1234567; //taken from some entropy pool etc
boost::mt19937 prng(seed);
boost::uniform_int<unsigned int> dist(0,1000);
boost::variate_generator<boost::mt19937&,boost::uniform_int<unsigned int> > generator(prng,dist);

unsigned int skip = 10000;
while (skip--)
{
   generator();
}

//now begin using for real.
....
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 这是神话还是有一些真理呢?

  2. 如果它可行,那么应该忽略多少位?因为我看到的数字
    似乎是随意的

c++ random math boost-random

8
推荐指数
1
解决办法
1100
查看次数

迭代器的继任者

我想用另一个迭代器(同类)的后继者初始化一个迭代器(任意类型).以下代码适用于随机访问迭代器,但它使用正向或双向迭代器失败:

Iterator i = j + 1;
Run Code Online (Sandbox Code Playgroud)

一个简单的解决方法是:

Iterator i = j;
++i;
Run Code Online (Sandbox Code Playgroud)

但这并不适用于for循环的初始化.我可以使用如下的函数模板:

template <typename Iterator>
Iterator succ(Iterator it)
{
    return ++it;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

Iterator i = succ(j);
Run Code Online (Sandbox Code Playgroud)

在STL或Boost中有类似的东西,还是有更好的解决方案我不知道?

c++ boost iterator stl

7
推荐指数
1
解决办法
690
查看次数

GCC/g ++ cout <<与printf()

  • 为什么printf("hello world")最终在汇编代码中使用更多的CPU指令(不考虑使用的标准库)比cout << "hello world"

对于C++,我们有:

movl    $.LC0, %esi
movl    $_ZSt4cout, %edi
call    _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc
Run Code Online (Sandbox Code Playgroud)

对于C:

movl    $.LC0, %eax
movq    %rax, %rdi
movl    $0, %eax
call    printf
Run Code Online (Sandbox Code Playgroud)
  • 什么是C++代码的第2行和来自C代码的第2,3行?

我正在使用gcc 4.5.2版

c c++ assembly gcc g++

7
推荐指数
1
解决办法
1800
查看次数

C++标准是否需要二进制机器?

我在标准中找到:

整数类型的表示应使用纯二进制计算系统定义值

但我的理解是,这不是要求C++必须在基于硬件基础2的机器上实现; 换句话说,这似乎只是程序员应该看到的要求.

C++标准是否需要二进制CPU,或者是否可以在三元或十进制机器上实现有效的C++实现?


小小的背景资料:在历史上,已经有电脑小数,ternaries,或计算机,其中一个C++字节是36位长(PDP-10)

c++ language-lawyer

6
推荐指数
1
解决办法
238
查看次数