我正在将无范围的枚举转换为范围枚举,并且遇到了一个难题。
斯特劳斯,C ++编程语言,第4版,第8.4.1节中,作用域枚举类不隐式转换为整数类型,并为运营商提供的代码文件|,并&为如何用一个例子static_cast来工作的解决这一问题。
使用|运算符对先前定义的enum值进行的以下初始化不合法吗?
enum class FileCopy {
PreviousHDUs = 1,
CurrentHDU = 2,
FollowingHDUs = 4,
AllHDUs = PreviousHDUs | CurrentHDU | FollowingHDUs,
CurrentHeader = 8
};
int main()
{
std::cout << static_cast<int>( FileCopy::AllHDUs) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我已经在Wandbox上使用clang和gcc HEAD进行了测试--pedantic-errors,它会编译并返回预期的输出7。这并不是说合法,只是编译器似乎接受了它。
是否有明确记录的行为?我一直无法以描述此行为的方式来解析文档。
我正在使用Google Test v1.7
我创建了一个自定义operator ==其ASSERT_EQ无法找到,但如果能直接使用被发现.这是代码
#include <vector>
#include <deque>
#include "gtest/gtest.h"
template< typename T> struct bar { T b; };
template< typename T>
bool operator == ( const std::vector<T>& v, const bar<T>& b ) { return false; }
template< typename T>
bool operator==( const std::vector<T>& v , const std::deque<T>& d) { return false; }
TEST( A, B ) {
std::vector<char> vec;
std::deque<char> deq;
bar<char> b;
// compiles
ASSERT_EQ( vec, b );
// compiles
vec == deq; …Run Code Online (Sandbox Code Playgroud) 我正在使用Perl 5.22.1.安全2.39
我正在调试一个程序,它偶然在一个安全隔间中运行代码.代码执行从另一个包共享的子例程.我对隔间中运行的代码不感兴趣,但无法避免其执行.执行共享子例程时,Perl调试器在隔离专区内晃动.
这是测试代码:
use warnings;
use strict;
use Safe;
sub MyPkg::foo { 33; }
my $safe= Safe->new;
$safe->share_from( 'MyPkg', [ '&foo' ] );
print $safe->reval(q[foo]), "\n";
print STDERR $@ if $@;
Run Code Online (Sandbox Code Playgroud)
直接运行时,我得到预期的输出:
% perl tdebug.pl
33
Run Code Online (Sandbox Code Playgroud)
但是,在Perl调试器下运行时,调试器非常不满意:
% perl -d tdebug.pl
Loading DB routines from perl5db.pl version 1.49
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(tdebug.pl:8): my $safe= Safe->new;
DB<1> c
Undefined subroutine &MyPkg::foo called at [...]/lib/5.22.1/perl5db.pl line 4183.
Debugged …Run Code Online (Sandbox Code Playgroud) 我想削弱Sub :: Quote生成的代码中的捕获变量.例如,这是未引用的替代方案:
use 5.10.0;
use Scalar::Util qw[ weaken ];
{
my $s = 'foo';
my $x = sub { say $s };
weaken( my $y = $x );
my $bar = sub { &$y };
&$bar;
$x = undef;
&$bar
}
Run Code Online (Sandbox Code Playgroud)
和输出:
foo
Can't use an undefined value as a subroutine reference [...]
Run Code Online (Sandbox Code Playgroud)
这是我的Sub :: Quote尝试:
use 5.10.0;
use Sub::Quote;
use Scalar::Util qw[ weaken ];
{
my $s = 'foo';
my $x = sub { say $s …Run Code Online (Sandbox Code Playgroud) 我的基于Moo的类具有惰性和非惰性属性,这两个属性都具有sub default和coercesubs.如果我没有初始化属性,我发现为普通属性调用了both default和coercesubs,但只default调用了lazy属性.这似乎不一致.这是示例代码:
package Foo;
use Moo;
has nrml => ( is => 'ro',
default => sub { print "nrml default\n" },
coerce => sub { print "nrml coerce\n" }
);
has lazy => ( is => 'ro',
lazy => 1,
default => sub { print "lazy default\n" },
coerce => sub { print "lazy coerce\n" }
);
my $q = Foo->new( );
$q->lazy;
Run Code Online (Sandbox Code Playgroud)
输出是:
nrml default
nrml coerce
lazy default
Run Code Online (Sandbox Code Playgroud)
coerce …