根据msvc,gcc和clang,以下代码是非法的:
template <typename T>
void f(T&& e) {
std::vector<T> v;
// do something with v and e ...
}
int main() {
int i;
f(i);
}
Run Code Online (Sandbox Code Playgroud)
msvc收益率
xmemory0(591):错误C2528:'指针':指向引用的指针是非法的
gcc和clang给出类似的声音错误消息.请注意,e不使用通用引用参数.编译器显然无法实例化向量v,抱怨它与引用一起使用int:
注意:请参阅
'std::vector<T,std::allocator<_Ty>>'正在编译的类模板实例化的引用Run Code Online (Sandbox Code Playgroud)[ T=int &, _Ty=int & ]
但我无法看到函数模板在哪里f被引用实例化int.
有人可以解释我们在这里看到的编译器错误吗?
我最近在MSDN上发现,例如System.String,.NET框架的类现在存在于三个不同的程序集中,即System.Runtime.dll,mscorlib.dll也是netstandard.dll.
之前,这个类只存在于程序集中mscorlib.dll.
我想这与.NET Core框架以及.NET标准规范的存在有关,但我不确定这三个程序集是如何不同的,以及它们可以分别在哪些平台上找到.
因此,如果我的猜测是正确的,那么问题是:哪个程序集属于哪个Framework(.NET,.NET Core,.NET Standard)?
这个程序(用选项编译-std=c++17)
#include <stdio.h>
#include <string>
void* operator new(std::size_t nrOfBytes) {
printf("allocate %zd bytes on heap\n", nrOfBytes);
void* p = malloc(nrOfBytes);
if (p) {
return p;
} else {
throw std::bad_alloc{};
}
}
int main() {
// new operator is called when compiled with Clang or MSVS or GCC
int* i = new int;
delete i;
// new operator is not called when compiled with GCC
// but is called with Clang and MSVS
std::string str(2000, 'x');
return 0; …Run Code Online (Sandbox Code Playgroud) Java Microbenchmarking工具(jmh)中的注释@OperationsPerInvocation的Javadoc指出:
value public abstract int value
返回:每个Benchmark调用的操作数.默认值:1
作为jmh的新手,我想知道这里的操作类型(字节代码操作,汇编代码操作,java操作......).
编辑(进一步澄清):这个问题自然是指jmh(文档,输出,注释......)中使用术语"操作"的所有地方.(例如,操作/时间单位或时间单位/操作).有关简明说明,请参阅下面接受的答案.
我正在使用带有 Groovy Maven 插件的 Apache Maven 3.3.9。这是 pom.xml 的相关部分(内联的 Groovy 脚本只是虚构的):
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<id>myGroovyPlugin</id>
<phase>prepare-package</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
log.info('Test message: {}', 'Hello, World!')
</source>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果我调用mvn install内联 Groovy 脚本,则插件会在准备包阶段调用该脚本,并且该脚本运行良好。但是,如果我尝试通过直接调用插件的目标,则会mvn groovy:execute收到以下错误消息:
[错误] 无法在项目练习 02 上执行目标 org.codehaus.gmaven:groovy-maven-plugin:2.0:execute (default-cli):目标 org.codehaus.gmaven:groovy-maven-plugin 的参数“源”: 2.0:execute is missing or invalid -> [Help 1]
我正在使用 Spring Security 的 OAuth2 服务器实现。我正在尝试/oauth/token使用 OAuth2“密码”授权类型从服务器的端点获取 access_token,方法是仅提供用户名和密码以及客户端 ID,而不提供客户端密码。只要我在AuthorizationHTTP 请求的标头中提供客户端 ID 和客户端密钥,这就可以正常工作,如下所示:
curl -u clientid:clientsecret http://myhost ... -d "grant_type=password&username=user&password=pw&client_id=OAUTH_CLIENT"
Run Code Online (Sandbox Code Playgroud)
遵循此处的建议:Spring OAuth2 disable HTTP Basic Auth for TokenEndpoint,我设法禁用了/auth/token端点的HTTP Basic 身份验证。但是当我尝试通过 cURL 获取 access_token 时:
curl http://myhost ... -d "grant_type=password&username=user&password=pw&client_id=OAUTH_CLIENT"
Run Code Online (Sandbox Code Playgroud)
我得到了一个BadCredentialsException并且可以看到消息:
身份验证失败:密码与存储值不匹配
在我的服务器日志中。在这一点上,我有点恼火,因为我的理解是,只有在用户名和/或密码有问题时才会显示此消息,而不是客户端 ID 和/或密码有问题。在 cURL 命令中额外提供客户端密码后,如下所示:
curl http://myhost ... -d "grant_type=password&username=user&password=pw&client_id=OAUTH_CLIENT&client_secret=SECRET"
Run Code Online (Sandbox Code Playgroud)
一切又好了。
那么这是否意味着我必须以一种或另一种方式提供客户端机密才能访问/auth/token端点?
PS:我知道这样一个事实,关于安全性,通过 HTTP 基本身份验证保护此端点通常是一个好主意,但在某些用例中,人们宁愿不这样做。
编辑:
我似乎找到了一种省略客户端机密的方法。这是我的 OAuth2 服务器配置(注意对allowFormAuthenticationForClients()和的调用autoApprove(true)):
@Configuration
@EnableAuthorizationServer
class OAuth2Config extends …Run Code Online (Sandbox Code Playgroud) 在我的 C# Windows 窗体应用程序中,我有一个DataGridView绑定到BindingList<Item>列表的列表,该列表又使用List<Item>.
// bind view to controller
myDataGridView.DataBindings.Add("DataSource", myController, "Items");
// bind controller to model
Items = new BindingList<Item>(model.Items);
Run Code Online (Sandbox Code Playgroud)
因此,数据网格的列是根据 class 的属性生成的Item。我为DataGridViewsCellFormatting事件提供了一个处理程序方法,以根据类型的某些属性值显示某些单元格值Item:
myDataGridView.CellFormatting += new DataGridViewCellFormattingEventHandler(myontroller.HandleCellFormatting);
Run Code Online (Sandbox Code Playgroud)
我现在还想将两个可能的图标之一添加到网格中的每一行,这也取决于 的某些属性的值Item。请注意,现在与任何项目的属性都有直接对应关系,因此我的网格中不能有额外的列来保存图标。所以我想我必须向已经存在的单元格添加一个图标,或者动态生成一个适当的列。有任何想法吗 ?
使用 Range-v3(0.10.0 版)库,我试图从 std::vector 构造一个范围,将其转换为另一个范围,最后对该范围进行排序。我预计排序步骤会产生另一个我可以稍后使用的范围。但我能想到的最好的是:
std::vector<std::string> const input { "2", "3", "1" };
using namespace ranges;
std::vector<int> output = input
| views::transform([](std::string s) { return std::stoi(s); })
| to<std::vector>()
| actions::sort
Run Code Online (Sandbox Code Playgroud)
注意在to<std::vector>()转换步骤之后和排序步骤之前的使用。std::vector当我想要的只是对转换步骤产生的范围进行排序时,这似乎分配了一个新的。
为什么没有view::sort?它非常适合上述范围的组成。
我正在探索Java Stream API的可能性,以便找出是否可以用基于流的构造替换所有基于循环的构造.作为一个可能暗示这实际上是可行的假设的例子,请考虑这个:
是否可以使用Stream API将包含由空格分隔的单词的字符串拆分为一个字符串数组,如下面的调用String.split(String)那样做?
String[] tokens = "Peter Paul Mary".split(" ");
我知道基于流的解决方案可以使自己使用String.split(String)这样的方法:
Stream.of("Peter Paul Mary".split(" "))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
或者使用Pattern.splitAsStream(CharSequence)(其实现肯定使用基于循环的方法),但我正在寻找一个仅限流的解决方案,这意味着与这个Haskell片段类似:
words :: String -> [String]
words s = case dropWhile Char.isSpace s of
"" -> []
s' -> w : words s''
where (w, s'') = break Char.isSpace s'
Run Code Online (Sandbox Code Playgroud)
我问这个是因为我仍然想知道Stream API的引入是否会导致我们在Java中处理对象集合的方式发生深刻变化,或者只是为它添加另一个选项,从而使维护更大的代码库变得更具挑战性而不是从长远来看简化这项任务.
编辑:虽然有一个公认的答案(见下文),但它只表明它可能在这种特殊情况下.我仍然对问题所要求的一般案例的任何提示感兴趣.
偶然发现了以下代码:
class Person
{
private:
char name[10];
public:
// this won't compile:
char* getName_1() const {
return name;
}
// this will:
const char* getName_2() const {
return name;
}
};
Run Code Online (Sandbox Code Playgroud)
我想知道编译器如何分辨这getName_1()不是const函数。因为函数体内没有代码实际上在修改成员变量。