草庐IT

c++ - 何时对多参数构造函数使用显式说明符?

我最近了解了explicit说明符。假设我们有:f(W,W,W);现在如果我们这样做f(42,3.14,"seven");编译器将尝试进行以下隐式转换:f(W(42),W(3.14),W("seven"));如果我们已经为W定义了匹配的构造函数,即:W(int);W(double);W(std::string);...它会成功。但是,如果我们明确第一个:explicitW(int);...这将禁用隐式转换。你现在必须写:f(W(42),3.14,"seven");即它迫使您明确说明转换现在开始问题:可以这样写:explicitW(int,int);//2arguments!编译成功!但

c++ - NaN 何时不在 C++ 中传播?

NaN通过“大多数”操作传播,如NaN-Wikipedia中所述.我想知道NaN不会传播的操作。例如,我正在用C++编写代码,发现以下代码打印出1,这不是NaN。constdoubleresult=std::pow(1,std::numeric_limits::quiet_NaN());std::cout对于std::pow函数,此行为在std::pow-cppreference.com中描述.您能分享其他示例吗? 最佳答案 下面的示例演示了返回非NaN的NaN函数。该列表在IEEE754-2008,9.2.1特殊值(还有一些其他函

c++ - 何时使用不声明类但具有函数定义的头文件

我是C++的新手,我见过一堆在头文件中有方法定义的代码,它们没有将头文件声明为类。有人可以向我解释为什么以及何时会做这样的事情。这是一种不好的做法吗?提前致谢! 最佳答案 Isthisabadpractice?一般不会。有很多库都是headeronly,这意味着它们只提供头文件。这可以被视为编译库的轻量级替代品。不过,更重要的是,在某些情况下您不能使用单独的预编译编译单元:模板必须专门用于声明它们的同一编译单元。这听起来很神秘,但它有一个简单的结果:函数(和类)模板不能在cpp文件中定义并在其他地方使用;相反,它们必须直接在头文件中

c++ - 默认参数对象何时销毁?

voidfoo(constObject&o=Object()){return;}在上面的函数中,什么时候应该调用~Object?函数何时退出或何时位于调用站点周围的block末尾? 最佳答案 默认参数将在包含函数调用的完整表达式结束时被销毁。 关于c++-默认参数对象何时销毁?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/14309633/

c++ - 何时使用 pthread_mutex_t

有人可以解释一下在什么情况下使用std::mutex与pthread_mutex_t比较有益。我不明白为什么我们会使用pthread_mutex_t。谢谢 最佳答案 pthread_mutex_t是一种POSIX解决方案(可用于linux和其他UNIX系统),在c++11将同步原语引入c++库之前就已经存在。您现在应该使用std::mutex,除此之外,它更跨平台(也可以在Windows下使用)。 关于c++-何时使用pthread_mutex_t,我们在StackOverflow上找到

c++ - 何时使用 std::string 与 char*?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C++char*vsstd::string我是从C#开始接触C++的新手,但我确实更喜欢C++。我有一个抽象类,它定义了两个常量字符串(不是静态的)。我想知道constchar*是否是更好的选择。我仍然了解C++标准,但我只是想在这种特殊情况下我真的没有任何理由需要使用std::string(没有附加或编辑字符串,只是写到通过printf控制台)。我应该在所有情况下都坚持使用std::string吗?

c++ - 何时使用 include guards 或 #pragma once C++

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion在每个头文件中使用您选择的包含守卫和#pragmaonce中的一个/两者是一个好习惯,还是只使用那些带有类声明等内容的文件??我很想把它放在每个头文件中,但我担心它是不必要的,只会增加编译时间。什么是好的做法或常见的做法?让我澄清一下:我理解两者之间的区别。我想问的是,根据经验,程序员是在每个文件中使用它,还是只在需要它的文件中使用它。

c++ - 何时使用 move 构造函数/赋值

我搜索过但找不到“何时”使用它们的答案。我一直听说它很好,因为它为我节省了额外的拷贝。我到处把它放在我上过的每个类(class)中,但有些人似乎对某些类(class)没有意义:我已经阅读了无数关于LValues和RValues以及std::movevs.std::copyvs.memcpy的教程与memmove等。甚至阅读throw()但我也不确定何时使用它。我的代码如下:structPoint{intX,Y;Point();Point(intx,inty);~Point();//Allmyotheroperatorshere..};然后我有一个类数组(类似RAII的东西):class

c++ - 何时为多态类初始化 vptr(指向 vtable)?

这与"WhenVTABLEiscreated?"无关.相反,应该在什么时候初始化VPTR?是在构造函数的开头/结尾还是在构造函数之前/之后?A::A():i(0),j(0)-->>here?{-->>here?//...-->>here?} 最佳答案 虚拟调用的机制(通常是一个v表,但不需要)是在ctor-initializer期间、基础子对象构造之后和成员构造之前设置的。[class.base.init]部分法令:Memberfunctions(includingvirtualmemberfunctions,10.3)canbec

c++ - feof() 如何真正知道何时到达文件末尾?

我是C++的初学者,正在努力更好地理解feof()。我读过feof()标志仅在尝试读取文件末尾后才设置为true很多次初学者如果执行类似同时(!feof(文件))。不过,我想了解的是,它实际上如何解释已尝试读取文件末尾的内容?是否已经读入了整个文件并且已知字符数,或者是否有其他机制在起作用?我意识到这可能是某处重复的问题,但我一直无法找到它,可能是因为我不知道如何最好地表达我所问的内容。如果已经有答案,将不胜感激。谢谢。 最佳答案 无论C++库做什么,最终它都必须从文件中读取。在操作系统的某个地方,有一段代码最终会处理该读取。它从文