草庐IT

c++ - 为什么 MSVS 允许 NULL 作为纯虚函数说明符?

考虑以下程序:structTest{virtualvoidfoo()=NULL;};intmain(){}g++4.8.1给出如下预期错误:[Error]invalidpurespecifier(only'=0'isallowed)before';'tokenClang给出以下错误:error:initializeronfunctiondoesnotlooklikeapure-specifier但是当我在MSVS2010上尝试它时,它编译并运行良好。我认为g++&clang在这种情况下是正确的。标准对此有何规定?我也使用\Za命令行选项禁用了编译器扩展,但MSVS仍然接受该代码。为什么

C++ 这个很少使用的构造函数语法是什么?

编辑:我认为这不是thisotherquestion的拷贝,因为另一个问题只是在构造函数中将()转换为{}。而我注意到当构造函数在struct中定义时的不同行为,而不是在class中。(而且,正如评论中所指出的,这是关于使用构造函数而不是编写它们。)但我以前错了。我在辅导时遇到了构造函数的这种奇怪的(对我来说)语法:Fooobj{i,j};起初我认为它行不通,并告诉学生重写它——但他们坚持认为它行得通,并告诉我他们从cplusplus.com上提取了示例,towhichI'venotbeenabletofindareference,所以我还是尝试了一下......它奏效了。所以我试验了

c++ - C++ 中的堆栈对象创建 - 替代语法

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhatdothefollowingphrasesmeaninC++:zero-,default-andvalue-initialization?我对C++中的一个问题感到困惑。当使用默认构造函数在堆栈上创建对象时,我认为以下两种语法符号中的任何一种都会给出相同的结果:classMyClass{public:inti;}intmain(){MyClassa=MyClass();MyClassb;}但是,第一个语法将字段初始化为零,而第二个语法使字段未初始化。所以我的问题是:为什么会这样?我认为C++中的字段不

C++ 初始化列表

我必须用structMHD_OptionItem类型的元素填充std::vector。这个结构有这个实现:structMHD_OptionItem{enumMHD_OPTIONoption;intptr_tvalue;void*ptr_value;};我试过这种方式:vectoriov;if(...)iov.push_back({MHD_OPTION_NOTIFY_COMPLETED,requestCompleted,NULL});if(...)iov.push_back({MHD_OPTION_CONNECTION_TIMEOUT,connectionTimeout});[....]

c++ - 将 C++ 数组转换为 vector

这是我在Leetcode上找到的代码.但是我无法理解以下两行,尤其是*(&a+1)。结果显示数组a的拷贝。谁能对此做出一些解释?谢谢!inta[5]={0,1,2,3,4};vectorv4(a,*(&a+1)); 最佳答案 从数组构造vector时,您通常会遇到的示例通常如下所示:inta[5]={...};vectorv4(a,a+5);//orvector(a,a+sizeof(a)/int);//automaticallycalculatenumelemsinsidea上面的例子简单地表明你想用数组“a”中的所有元素构造一个

c++ - 时间函数语法

为什么time函数通常是这样使用的:time_tcurrentTime;currentTime=time(NULL);而不是这个:time_tcurrentTime;time(¤tTime);第一种方法被更多地使用是因为它可以说更具可读性吗?还是另有原因?谢谢。编辑:另外,为什么time函数要这样设计?为什么有两种设置变量的方法? 最佳答案 从函数返回值似乎总是比传递已更改的参数更有意义。这可能是因为我们学的是函数和子程序不同的语言,不知道现在这些年轻人。 关于c++-时间函

C++ : syntax for passing iterator to a function?

我正在制作一个类,它是一种容器,我想制作一个可以采用“第一个”和“最后一个”迭代器的构造函数,如std::vector和其他标准容器。正确的语法是什么?(我想要一个模板函数,它可以接受任何可用的第一个/最后一个迭代器类型(就像我认为的标准库)。非常感谢!举个例子,我想要这样的东西:templateMyClass(...first,...last)但是……是什么?非常感谢。关于第一个答案:我想要一个将迭代器作为参数的特定构造函数(因为我已经有了将值和指针作为参数的构造函数)编辑:这样可以吗?templateMyClass(std::iteratorfirst,std::iteratorl

c++ - 匿名结构内部循环

下面的代码可以用g++编译好#includeusingnamespacestd;intmain(){for(struct{inti;doublej;}x={0,0};x.i但是使用MSVC2005我会出错errorC2332:'struct':missingtagnameerrorC2143:syntaxerror:missing')'before'{'warningC4094:untagged'struct'declarednosymbolserrorC2059:syntaxerror:'emptydeclaration'errorC2143:syntaxerror:missing'

c++ - 在类定义中允许不必要的分号的目的

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion考虑以下程序:#includestructTest{inta;Test(ints):a(s){};//Observethissemicolonintgeta(){returna;}};intmain(){Testt(3);std::cout即使我在gcc和clang中使用-pedantic-errors选项,程序也能正常编译。(参见现场演示here和here。)如果我在geta()成员函数

c++ - syntax::function_name 在 C++ 中是什么意思?

在名为::foo()的函数中,我不明白语法的用途。如果它是foo::count_all()那么我知道count_all是类或命名空间foo的函数。在::foo()的情况下,::引用的是什么? 最佳答案 ::运算符正在调用namespace或class。在您的情况下,它正在调用全局命名空间,它是不在命名空间中的所有内容。下面的例子说明了为什么namespace很重要。如果您只是调用foo(),您的调用将无法解析,因为有2个foo。您需要使用::foo()解决全局问题。namespaceHidden{intfoo();}intfoo()