如何使用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) 我一直在阅读函数指针以及将它们用作其他函数的参数.我的问题是如何在不使用指针的情况下通过引用传递函数?我一直试图在互联网上找到答案,但我没有找到一个好的答案.我知道您可以通过引用传递变量,如下所示: void funct(int& anInt);.你会如何做与此类似的事情,但是对一个变量的引用而不是对函数的引用是参数?另外,如何在函数体中使用函数的引用?
一些重构导致一段代码导致我进入这个最小的测试用例:
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.另一个编译错误?
这种情况与如何对构造函数的参数进行约束有关,但它略有不同.
您想要初始化非默认可构造成员,但需要在构造之前检查约束.
(请注意,这只是一个例子.在这种特定情况下是否应该使用无符号整数是可以讨论的,但问题实际上是关于你想检查构造函数的一般情况)
你有以下课程:
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++与gui在Linux下工作?
注意:明确没有寻找完整的IDE.
似乎有一些关于使用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)
我的问题是:
这是神话还是有一些真理呢?
如果它可行,那么应该忽略多少位?因为我看到的数字
似乎是随意的
我想用另一个迭代器(同类)的后继者初始化一个迭代器(任意类型).以下代码适用于随机访问迭代器,但它使用正向或双向迭代器失败:
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中有类似的东西,还是有更好的解决方案我不知道?
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)
我正在使用gcc 4.5.2版
我在标准中找到:
整数类型的表示应使用纯二进制计算系统定义值
但我的理解是,这不是要求C++必须在基于硬件基础2的机器上实现; 换句话说,这似乎只是程序员应该看到的要求.
C++标准是否需要二进制CPU,或者是否可以在三元或十进制机器上实现有效的C++实现?
小小的背景资料:在历史上,已经有电脑小数,ternaries,或计算机,其中一个C++字节是36位长(PDP-10)