草庐IT

合法性

全部标签

java - 在同一个线程上调用 start 方法两次是否合法?

当我在程序中调用start()方法第二次时,以下代码导致java.lang.IllegalThreadStateException:Threadalreadystarted。updateUI.join();if(!updateUI.isAlive())updateUI.start();这发生在updateUI.start()被调用的秒次。我已经多次遍历它,并且在点击updateUI.start()之前调用了线程并完全运行到完成。调用updateUI.run()可以避免错误,但会导致线程在UI线程中运行(调用线程,如SO上的其他帖子中所述),这不是我想要的。一个线程可以启动一次吗?如果是

c++ - C++ 优化器重新排序对时钟()的调用是否合法?

TheC++ProgrammingLanguage第4版,第225页写道:编译器可以重新排序代码以提高性能,只要结果与简单执行顺序的结果相同。一些编译器,例如Release模式下的VisualC++,将重新排序此代码:#include...autot0=clock();autor=veryLongComputation();autot1=clock();std::cout变成这种形式:autot0=clock();autot1=clock();autor=veryLongComputation();std::cout保证与原始代码不同的结果(报告的时间为零与大于零)。见myotherq

c++ - 比较悬空指针是否合法?

比较悬空指针是否合法?int*p,*q;{inta;p=&a;}{intb;q=&b;}std::cout注意p和q如何指向已经消失的对象。这合法吗? 最佳答案 简介:第一个问题是使用p的值是否合法。a被销毁后,p获取所谓的无效指针值。引自N4430(有关N4430状态的讨论,请参见下面的“注释”):Whentheendofthedurationofaregionofstorageisreached,thevaluesofallpointersrepresentingtheaddressofanypartofthedeallocat

c++ - 对结构进行索引是否合法?

无论代码有多“糟糕”,并且假设对齐等在编译器/平台上不是问题,这是未定义或损坏的行为吗?如果我有这样的结构:-structdata{inta,b,c;};structdatathing;a、b、c作为(&thing.a)访问是否合法[0]、(&thing.a)[1]和(&thing.a)[2]?在每种情况下,在我尝试过的每个编译器和平台上,我尝试过的每个设置都“有效”。我只是担心编译器可能没有意识到b和thing[1]是同一个东西,并且存储到'b'可能会放在一个寄存器中[1]从内存中读取错误的值(例如)。在每种情况下,我都尝试过它做了正确的事情。(我当然意识到这并不能证明什么)这不是我

c++ - 将 C++ 对象传递给它自己的构造函数是否合法?

我惊讶地发现以下工作:#includeintmain(intargc,char**argv){structFoo{Foo(Foo&bar){std::cout我将构造对象的地址传递给它自己的构造函数。这看起来像是源代码级别的循环定义。标准是否真的允许您在构建对象之前将对象传递给函数,或者这是未定义的行为?我想这并不奇怪,因为所有类成员函数都已经有一个指向它们的类实例的数据的指针作为隐式参数。并且数据成员的布局在编译时是固定的。注意,我不是在问这是有用还是好主意;我只是在修补以了解有关类(class)的更多信息。 最佳答案 这不是未定

c++ - C++11 中 COW std::string 实现的合法性

据我了解,写时复制不是在C++11中实现符合标准的std::string的可行方法,但当它最近在讨论中出现时,我发现我自己无法直接支持这种说法。C++11不承认基于COW的std::string实现我是否正确?如果是这样,这个限制是否在新标准的某处明确说明(在哪里)?或者这个限制是否隐含,因为它是对std::string的新要求的综合影响,它排除了基于COW的std::string。在这种情况下,我会对“C++11有效禁止基于COW的std::string实现”的章节风格派生感兴趣。 最佳答案 这是不允许的,因为根据标准21.4.1

c++ - 是什么让 i = i++ + 1;在 C++17 中合法吗?

在你开始大喊未定义的行为之前,这明确列在N4659(C++17)中i=i+++1;//thevalueofiisincremented然而在N3337(C++11)i=i+++1;//thebehaviorisundefined发生了什么变化?据我所知,来自[N4659basic.exec]Exceptwherenoted,evaluationsofoperandsofindividualoperatorsandofsubexpressionsofindividualexpressionsareunsequenced.[...]Thevaluecomputationsoftheoper

c++ - 无限 std::chrono::duration 对象合法吗?

制作和使用std::chrono::duration是否合法的包含值是无穷大,像这样吗?std::chrono::duration{std::numeric_limits::infinity()};它会表现得“像我预期的那样”,在与其他持续时间相加或相减时保持无限值吗?我已经研究了cppreference,但我发现讨论这个问题的唯一内容是duration_cast上的页面注意到:Castingfromafloating-pointdurationtoanintegerdurationissubjecttoundefinedbehaviorwhenthefloating-pointval

c++ - 无限 std::chrono::duration 对象合法吗?

制作和使用std::chrono::duration是否合法的包含值是无穷大,像这样吗?std::chrono::duration{std::numeric_limits::infinity()};它会表现得“像我预期的那样”,在与其他持续时间相加或相减时保持无限值吗?我已经研究了cppreference,但我发现讨论这个问题的唯一内容是duration_cast上的页面注意到:Castingfromafloating-pointdurationtoanintegerdurationissubjecttoundefinedbehaviorwhenthefloating-pointval

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