草庐IT

c++ - 将 NULL 转换为 long 是不是有歧义?

我正在尝试使用NULL与nullptr的示例。由于NULL可以转换为整数类型,因此它应该与下面的示例显示出歧义,但事实并非如此!它显示不明确的候选编译错误,如果它是unsignedlong,但不是signedlong。谁能解释一下原因!!#includeusingnamespacestd;//NOTE://"long"or"signedlong"isnotshowingambiguouscandidates//but"unsignedlong"doesvoidfunc(longst){cout 最佳答案 在C++中,NULL被定义为

【C语言】判断是不是闰年

闰年的判断方法(两个条件都满足):1)年份能被4整除,但不能被100整除。2)年份能被400整除。题目一输入一个年份,判断它是不是闰年方法1(基础版)#define_CRT_SECURE_NO_WARNINGS1#includeintmain(){ inty=0; printf("请输入一个年份:"); scanf("%d",&y); if(((y%4==0)&&(y%100!=0))||(y%400==0)) printf("%d是闰年",y); else printf("%d不是闰年",y); return0;} 方法2(利用函数) 我们可以利用bool或者_Bool的返回值来判断是否

c++ - 有没有办法告诉 openmp 共享数据是不变的?

我猜测即使从openmp中的共享数据读取也会导致一些并行开销,因为取决于处理器架构(如果不同的内核有自己的缓存......)可能需要刷新缓存以确保没有其他cpu在读取之前修改了数据。我这样想对吗?如果是这样,有没有办法告诉openmp(在英特尔编译器fwiw上)一些共享数据是常量,因此不需要这样的缓存刷新?如果答案是c++const是否有一种简单的方法可以将非常量数据转换为const数据,而无需实际重新分配内存,一旦程序在运行时通过了某个点?更新啊,好的。我现在记得我的印象是const在这种情况下是一件好事:http://www.akkadia.org/drepper/cpumemor

c++ - 在我的函数中重新创建一个微型垃圾收集系统是不是很疯狂?

我有一些(C++)函数,每个函数都包含几个调用,在堆上创建相同基本类型的类似数组。在这些函数的不同位置,我可能需要抛出异常。跟踪哪些数组已被删除是一件很痛苦的事情,而且很容易出错,所以我考虑只将数组指针添加到Set中。,当我捕获到异常时,我可以删除其中的每个项目,如下所示:try{setsHeap;ArrType*myArr=newArrType[5];sHeap.Add(myArr);someExternalRoutine(myArr);...}catch(CStrings){DeleteAllPointersInMyHeap(sHeap);throw(s);}感觉有点像添加本轮,但

c++ - 直接调用析构函数后 `new (this) MyClass();`是不是未定义行为?

在thisquestionofmine,@DeadMG说通过this指针重新初始化一个类是未定义的行为。标准中有没有提到它?例子:#includeclassX{int_i;public:X():_i(0){std::cout~X();new(this)X(5);}voidprint_i(){std::coutExampleoutputatIdeone(我知道UB也可以是“看似正确的行为”)。请注意,我没有在类外部调用析构函数,因为不访问生命周期已结束的对象。另请注意,@DeadMG说直接调用析构函数是可以的,只要它对每个构造函数调用一次即可。 最佳答案

c++ - 为什么使用 auto 的直接列表初始化被认为是不好的或不受欢迎的?

我已经养成了使用直接列表初始化编写代码的习惯,因为它更有效,而且对于防止隐式narrowing非常有用。:inti{0};strings{""};charc{'a'};boolb{false};autonum{100};//Butthis??但是当涉及到自动说明符时,我听说这样写被认为是不好的或不受欢迎的,这是为什么呢? 最佳答案 这是使用该语法失败的示例:structFoo{};voideatFoo(constFoo&f){}intmain(){Fooa;autob{a};eatFoo(b);}您可能希望这没问题:b应该是Foo并

c++ - 完全作为库实现的 C++ is_lambda 特性是不可能的吗?

我有一个关于C++0xlambda的问题。在我的代码中,了解给定类型是否是C++0xlambda表达式的类型将是有益的。举个例子:structfoobar{voidoperator()(){}};autolambda=[]{};typedefis_lambda::typeT;//Twouldbeatrue_typetypedefis_lambda::typeT;//Twouldbeafalse_type将lambda表达式与函数和成员函数类型区分开来相当容易。仿函数是另一回事。我在这里看到的问题是根据即将到来的C++0x标准定义lambda表达式;唯一必须定义的是公共(public)调

c++ - 从没有虚方法的基类继承是不好的做法吗?

我曾经读过一个关于dynamic_cast问题的答案。dynamic_cast无法工作,因为基类没有虚方法。其中一个答案说,从没有虚方法的类派生通常意味着糟糕的设计。这个对吗?即使不利用多态性,我仍然看不出这样做有什么错误。 最佳答案 这取决于我们在谈论什么:对于Traits类(无数据)没问题(想到了std::unary_function)对于private继承(用于代替组合以从空基优化中受益)也很好当您开始以多态方式处理此类Derived对象时,问题就出现了。如果您达到了这样的位置,那肯定是代码味道。注意:即使上面提到的很好,您仍

c++ - 标准容器元素类型和std::allocator类型不一样是不是错了?

取自here(很旧):It'salsoimportantthatthetypeusedfortheallocatortemplateparameterandthetypeusedastheelementtypeinastandardcontaineragree.Forinstance:std::list>//Wrong!won'twork.问题以上说法是否正确(或曾经正确过)?无论我为T设置什么,我所做的任何测试似乎都可以正常工作在std::allocator.例如,std::vector>编译和工作正常推回和删除元素等。(据我所知,std::allocator::rebind::ot

c++ - 在栈上分配16kb是不是太多了?

我需要在调用c函数之前实例化一个char[16384]缓冲区。函数返回后,我将读取它的某些部分并将其丢弃。在栈上分配好还是在堆上分配好?编辑:我将添加一些信息。该代码将在多个平台上运行,从PC到iPhone,我猜堆栈空间不会那么大,但我对此一无所知。 最佳答案 很难对这个问题给出明确的是或否,因为答案在很大程度上取决于您的环境以及在程序中调用分配内存的函数的时间点。但就我个人而言,如果我在代码审查中看到这一点,我会发出危险信号。这是用于基于堆栈的缓冲区的大量内存。它今天可能在您使用它的特定地方工作,但明天当您被跟注时筹码量大得多时怎