草庐IT

合法性

全部标签

c++ - 使用线程池的 std::async 的 Visual C++ 实现是否合法

VisualC++在调用CreateThreadpoolWork时使用Windows线程池(Vista的QueueUserWorkItem如果可用,std::async如果没有)与std::launch::async.池中的线程数是有限的。如果创建多个长时间运行而不休眠的任务(包括执行I/O),队列中即将到来的任务将没有机会工作。标准(我使用的是N4140)说使用std::async与std::launch::async...callsINVOKE(DECAY_COPY(std::forward(f)),DECAY_COPY(std::forward(args))...)(20.9.2

c++ - void{} 是否合法?

这是this的后续行动问题。在评论和答案中,不止一次提到void{}既不是有效的类型ID,也不是有效的表达式。这很好,很有意义,仅此而已。然后我通过[7.1.7.4.1/2](占位符类型扣除)工作草案。据说:[...]-foranon-discarded return statementthatoccursinafunctiondeclaredwithareturntypethatcontainsaplaceholdertype, T isthedeclaredreturntypeand e istheoperandofthe returnstatement.Ifthe return 

c++ - void{} 是否合法?

这是this的后续行动问题。在评论和答案中,不止一次提到void{}既不是有效的类型ID,也不是有效的表达式。这很好,很有意义,仅此而已。然后我通过[7.1.7.4.1/2](占位符类型扣除)工作草案。据说:[...]-foranon-discarded return statementthatoccursinafunctiondeclaredwithareturntypethatcontainsaplaceholdertype, T isthedeclaredreturntypeand e istheoperandofthe returnstatement.Ifthe return 

c++ - 为什么 "defau4t"在 switch 语句中是合法的?

这个问题在这里已经有了答案:Defaultcaseinaswitchcondition(3个回答)关闭8年前。我在其他网站上提出了这个程序并想尝试一下,程序如下:#includeintmain(){inta=10;switch(a){case'1':printf("one");break;case'2':printf("two");break;defau4t:printf("none");}return0;}令人惊讶的是,它编译时没有错误或警告。这怎么可能?关键字“default”没有错误吗?谁能解释这种行为? 最佳答案 token

c++ - 为什么 "defau4t"在 switch 语句中是合法的?

这个问题在这里已经有了答案:Defaultcaseinaswitchcondition(3个回答)关闭8年前。我在其他网站上提出了这个程序并想尝试一下,程序如下:#includeintmain(){inta=10;switch(a){case'1':printf("one");break;case'2':printf("two");break;defau4t:printf("none");}return0;}令人惊讶的是,它编译时没有错误或警告。这怎么可能?关键字“default”没有错误吗?谁能解释这种行为? 最佳答案 token

c++ - 像这样的 C++ 中的 "rebinding"引用是否合法?

以下在C++中是否合法?据我所知,Reference有一个微不足道的析构函数,所以它应该是合法的。但我认为引用不能合法地反弹......可以吗?templatestructReference{T&r;Reference(T&r):r(r){}};intmain(){intx=5,y=6;Referencer(x);new(&r)Reference(y);} 最佳答案 您并没有重新绑定(bind)引用,而是在另一个具有新位置的内存中创建一个新对象。由于旧对象的析构函数从未运行,我认为这将是未定义的行为。

c++ - 像这样的 C++ 中的 "rebinding"引用是否合法?

以下在C++中是否合法?据我所知,Reference有一个微不足道的析构函数,所以它应该是合法的。但我认为引用不能合法地反弹......可以吗?templatestructReference{T&r;Reference(T&r):r(r){}};intmain(){intx=5,y=6;Referencer(x);new(&r)Reference(y);} 最佳答案 您并没有重新绑定(bind)引用,而是在另一个具有新位置的内存中创建一个新对象。由于旧对象的析构函数从未运行,我认为这将是未定义的行为。

c++ - 在现代 C++ 中在函数声明中定义返回变量是否合法?

我在CodeSignal上发现了一段奇怪的C++语法。:stringr,longestDigitsPrefix(strings){for(autoconstc:s){if(isdigit(c))r+=c;elsebreak;}returnr;}第一行是在函数声明之前定义stringr。这在现代C++中有效吗?上面的代码编译并通过了CodeSignal控制台中的所有测试,但是当我尝试在本地编译时它产生了编译器错误(--std=c++14)。这是现代C++中的有效语法吗?如果是,它符合哪个标准修订版? 最佳答案 是的,C++语法很奇怪。

c++ - 在现代 C++ 中在函数声明中定义返回变量是否合法?

我在CodeSignal上发现了一段奇怪的C++语法。:stringr,longestDigitsPrefix(strings){for(autoconstc:s){if(isdigit(c))r+=c;elsebreak;}returnr;}第一行是在函数声明之前定义stringr。这在现代C++中有效吗?上面的代码编译并通过了CodeSignal控制台中的所有测试,但是当我尝试在本地编译时它产生了编译器错误(--std=c++14)。这是现代C++中的有效语法吗?如果是,它符合哪个标准修订版? 最佳答案 是的,C++语法很奇怪。

c++ - 在 C++ 函数调用中使用自增运算符是否合法?

thisquestion中发生了一些争论。关于以下代码是否合法的C++:std::list::iteratori=items.begin();while(i!=items.end()){boolisActive=(*i)->update();if(!isActive){items.erase(i++);//***Isthisundefinedbehavior?***}else{other_code_involving(*i);++i;}}这里的问题是erase()将使有问题的迭代器无效。如果在评估i++之前发生这种情况,那么像这样递增i在技术上是未定义的行为,即使它看起来可以与特定的编