草庐IT

c++ - 可变参数聚合作为核心语言功能

std::tuple是高度模板加载的野兽。要访问第n个成员,编译器必须执行大量模板实例化,尽管它的性质很简单:访问相应虚构结构的第n个数据成员。看起来std::tuple应该是一个核心语言特性,像这样(伪代码):templatestruct/*orclass,orevenunion*/V{types...V;//definesimplicitly`operator[/*constantexpression*/]`toaccessbyindex//ifmorethanonevariadicparameterpackprovided//(duringexpandingofparameter

c++ - if 语句中的函数名以一种奇怪的方式转换

使用此代码(有效的C++11):#include#includeboolmy_awesome_func(intparam){return(param>1);}intmain(intargc,charconst*argv[]){fprintf(stderr,"typeofmy_awesome_func:%s\n",typeid(my_awesome_func).name());if(my_awesome_func){fprintf(stderr,"WHAT???\n");}return0;}问题在if语句中。虽然typeid返回一些看起来像FbiE的东西(我认为这是函数类型的gcc语言)

C++ 类型定义不清楚

在下面的C++代码中,double(*)double是什么意思?它是什么样的返回类型?autoget_fun(intarg)->double(*)(double)//sameas:double(*get_fun(int))(double){switch(arg){case1:returnstd::fabs;case2:returnstd::sin;default:returnstd::cos;}} 最佳答案 double(*)(double)它是一个函数指针签名,用于接受一个double参数并返回double的函数。一般X(*)(A

C++14 元编程 : Automagically build a list of types at compile/init time

使用C++14和CuriouslyRecurringTemplatePattern(CRTP)以及可能的Boost.Hana的某种组合(或boost::mpl如果您愿意),我可以在编译时(或静态初始化时)构建一个类型列表而无需显式声明吗?例如,我有这样的东西(在Coliru上查看):#include#include#includenamespace{structD1{staticconstexprautoval=10;};structD2{staticconstexprautoval=20;};structD3{staticconstexprautoval=30;};}intmain(

c++ - 为什么 C++ 允许但忽略将 const 应用于函数类型?

我从探索C++的不寻常角落中得到真正的乐趣。从thisquestion了解了真正的函数类型而不是函数指针,我试着搞乱函数类型并想出了这个奇怪的案例:typedefintFunc(int);intFoo(intx){return1;}intmain(){constFunc*&f=&Foo;return0;}因为&Foo是Func*类型的右值,我想我应该可以把它放在一个const引用中,但是我从g++4.6得到这个错误:funcTypes.cpp:Infunction‘intmain()’:funcTypes.cpp:7:23:error:invalidinitializationofno

C++ 连接字符串导致 "invalid operands of types ‘const char*’ 和 ‘const char"

我想连接两个字符串,但出现错误,我不知道如何克服这个错误。有什么方法可以将这个constchar*转换为char吗?我应该使用一些取消引用吗?../src/main.cpp:38:error:invalidoperandsoftypes‘constchar*’and‘constchar[2]’tobinary‘operator+’make:***[src/main.o]Error1但是,如果我尝试以这种方式组成“bottom”字符串,它会起作用:bottom+="|";bottom+=tmp[j];bottom+="";这是代码。#include#include#include#inc

c++ - size_t 在哪里定义的?

所以我知道CCompatabilityHeaders中的任何标题:Placesintheglobalnamespaceeachnamethatthecorrespondingcxxxheaderwouldhaveplacedinthestdnamespace我还知道这些C头文件自c++17起已被弃用。,支持它们的兼容性“cxxx”对应物。现在,我相信size_t完全由StandardDefinesHeader定义.所以我认为这在技术上意味着全局命名空间中size_t的定义已被弃用?多年来我一直将它用作size_t,在我开始使用std::size_t之前,我希望得到确认。

c++ - istream (ostream) 与 bool

这是一个读取尽可能多的单词的C++代码尽可能从给定的文本文件开始,直到遇到EOF。stringtext;fstreaminputStream;inputStream.open("filename.txt");while(inputStream>>text)cout我的问题是:将while循环的条件(即inputStream>>text)转换为bool值(即true或false)到底执行了什么过程?我自己对这个问题的回答是:据我了解,inputStream>>text应该返回另一个(文件)输入流。当EOF到达时,流似乎为NULL。NULL可以定义为0,相当于false。我的回答有道理吗?

c++ - std::streampos 是否保证为 unsigned long long?

std::streampos是否保证为unsignedlonglong?如果不是这样,std::istream::seekg如何在大于4G的文件上正常工作? 最佳答案 来自http://en.cppreference.com/w/cpp/io/fpos:std::streampos是类模板的特化templateclassfpos;std::streampos类型定义为std::fpos::state_type>类型为fpos的每个对象保存流中的字节位置(通常作为std::streamoff类型的私有(private)成员)。来自ht

c++ - 如何解释这个 C++ 类型?

今天我正在帮助处理以下不正确的代码片段(func是用int参数声明的,但是int*作为第二个参数传递给了std::thread构造函数):#includevoidfunc(int);int*ptr;voidstart(){std::threadt=std::thread(func,ptr);}当我尝试用gcc5.3.0编译它时,它打印了以下类型的错误消息:classstd::result_of现在我想知道如何解释作为参数传递给classstd::result_of的类型.它类似于指向函数的指针(在本例中为void(*)(int)),但带有额外的(int*)在括号中的星之后。这个类型怎么