小编rus*_*tyx的帖子

用户定义的转换运算符模板和内置运算符:不匹配运算符

考虑以下MCVE.

#include <type_traits>

struct A {
    template<typename T, typename std::enable_if<std::is_same<T,int>::value,int>::type = 0>
    operator T() const { return static_cast<T>(1); }
};

int main() {
    int x = 1;
    A a;
    return x + a;
}
Run Code Online (Sandbox Code Playgroud)

clang汇编得很好.DEMO

海湾合作委员会失败了:

error: no match for 'operator+' (operand types are 'int' and 'A')
  return x + a;
         ~~^~~
Run Code Online (Sandbox Code Playgroud)

问题:谁是对的?为什么?

c++ language-lawyer c++11

9
推荐指数
1
解决办法
167
查看次数

为什么 std::set::extract() 和 std::set::insert(nh) 的标准中没有不抛出保证?

在 C++20 (N4849) 中,关联容器extract()insert(node_handle)/insert(hint, node_handle)方法没有异常安全措辞。

但是对于merge(),虽然有这样的措辞:

抛出:除非比较对象抛出,否则什么都没有。

位置:
22.2.6 关联容器 [associative.reqmts]
表 78:关联容器要求(除了容器)[tab:container.assoc.req]
第 799 页

显然,最初的提案 ( P0083R3 ) 旨在使其无投掷(第 5 页):

异常安全

如果容器的 Compare 函数是 no-throw(这是很常见的),那么移除、修改和插入节点都是 no-throw,除非修改值会抛出。如果修改值确实抛出,它会在所涉及的容器之外进行。

但为什么在该提案后面的拟议措辞中没有发言权?

c++ splice language-lawyer throws c++20

9
推荐指数
1
解决办法
270
查看次数

Spring MVC bean映射到HTTP GET请求参数,类似于@BeanParam

在Jersey中有一个@BeanParam注释,我可以将请求参数映射到bean属性.

在Spring中,我只能找到@RequestBody哪个显然适用于请求体而不是请求参数.

有没有办法让请求参数使用Spring映射到bean?

rest spring spring-mvc

8
推荐指数
1
解决办法
8816
查看次数

如何判断哪个进程在Windows中设置了高计时器分辨率

我的系统正在遭受高计时器分辨率(NtQueryTimerResolution返回0.5ms).

Maximum timer interval: 15.600 ms
Minimum timer interval: 0.500 ms
Current timer interval: 0.500 ms
Run Code Online (Sandbox Code Playgroud)

某些进程必须使用NtSetTimerResolution5000(0.5ms)的值调用,但如何确定哪一个?我看到英特尔有一个名为电池寿命分析器的工具,它显示每个进程的当前计时器分辨率,但该工具仅供英特尔合作伙伴使用.是否有其他工具或通过WinDbg查看它的方法?注意:似乎在启动时发生,因为设置断点不起作用(调试器启动时分辨率已经很高).

windows windows-kernel

8
推荐指数
1
解决办法
2045
查看次数

std :: bind()错误:无法确定重载函数的哪个实例"boost :: asio :: io_service :: run"是打算

尝试在Visual C++ 2015中编译时

  auto worker = std::bind(&boost::asio::io_service::run, &(this->service));
Run Code Online (Sandbox Code Playgroud)

我收到错误:

error C2783: 'std::_Binder<_Ret,_Fx,_Types...> std::bind(_Fx &&,_Types &&...)': could not deduce template argument for '_Ret'
note: see declaration of 'std::bind'

error C2783: 'std::_Binder<_Ret,_Fx,_Types...> std::bind(_Fx &&,_Types &&...)': could not deduce template argument for '_Fx'
note: see declaration of 'std::bind'

error C2783: 'std::_Binder<std::_Unforced,_Fx,_Types...> std::bind(_Fx &&,_Types &&...)': could not deduce template argument for '_Fx'
note: see declaration of 'std::bind'
Run Code Online (Sandbox Code Playgroud)

此外,IntelliSense抱怨:

cannot determine which instance of overloaded function "boost::asio::io_service::run" is intended
Run Code Online (Sandbox Code Playgroud)

我看到有2个重载boost::asio::io_service::run.但是如何指定使用哪一个?

使用boost::bind代码编译就好了: …

c++ boost c++11

8
推荐指数
1
解决办法
5822
查看次数

我应该通过std :: function by-value还是通过(rvalue)-reference?

我不太明白std::function实际包含的实例是什么.

通过按值或按引用传递它是否更有效?

以下示例中的性能影响是什么?

通过值:

void printStats(std::function<void(const char *)> printer);
. . .
std::string tmp;
printStats([&tmp](const char * msg){ tmp += msg; });
Run Code Online (Sandbox Code Playgroud)

通过rvalue-reference:

void printStats(std::function<void(const char *)>&& printer);
. . .
std::string tmp;
printStats([&tmp](const char * msg){ tmp += msg; });
Run Code Online (Sandbox Code Playgroud)

c++ c++11

8
推荐指数
1
解决办法
2494
查看次数

跨TU的类模板重载

考虑以下C++ 11应用程序:

A.cpp:

template<typename T>
struct Shape {
    T x;
    T area() const { return x*x; }
};

int testA() {
    return Shape<int>{2}.area();
}
Run Code Online (Sandbox Code Playgroud)

B.cpp:

template<typename T, typename U = T>
struct Shape {
    T x;
    U y;
    U area() const { return x*y; }
};
int testB() {
    return Shape<int,short>{3,4}.area();
}
Run Code Online (Sandbox Code Playgroud)

Main.cpp的:

int testA();
int testB();
int main() {
   return testA() + testB();
}
Run Code Online (Sandbox Code Playgroud)

虽然它编译(只要A和B是在单独的TU),它看起来不正确,和我有麻烦弄清楚为什么.

因此,我的问题:这是否违反ODR,超载,或任何其他规则,如果是这样,什么部分标准受到侵犯,为什么?

c++ language-lawyer c++11

8
推荐指数
1
解决办法
224
查看次数

聚合字段构造函数必须是公共的才能在 C++ 中使用聚合初始化吗?

请考虑带有带有私有构造函数B的类字段的聚合结构的代码A

class A { A(int){} friend struct B; };
struct B { A a{1}; };

int main()
{
    B b; //ok everywhere, not aggregate initialization
    //[[maybe_unused]] B x{1}; //error everywhere
    [[maybe_unused]] B y{}; //ok in GCC and Clang, error in MSVC
}
Run Code Online (Sandbox Code Playgroud)

我的问题是关于B. 由于初始化是代表调用代码(main此处的函数)进行的,我预计编译器必须拒绝它,因为A的构造函数是私有的。事实上B{1},所有编译器的构造都失败了。

但令我惊讶的B{}是,GCC 和 Clang 都接受了该构造,演示:https : //gcc.godbolt.org/z/7851esv6Y

并且只有 MSVC 拒绝它并显示错误 error C2248: 'A::A': cannot access private member declared in class 'A'。 …

c++ language-lawyer aggregate-initialization c++20

7
推荐指数
1
解决办法
132
查看次数

使用预处理器将JSON作为字符串嵌入C ++代码中

我在Chromium项目中看到了C ++和JSON代码的混合体。

例如在此文件中: config / software_rendering_list_json.cc

这个宏是魔术吗?

#define LONG_STRING_CONST(...) #__VA_ARGS__
Run Code Online (Sandbox Code Playgroud)

如何“字符串化”任意JSON内容?

c++ c-preprocessor

6
推荐指数
2
解决办法
1557
查看次数

C++:在编译时将动态信息输出到日志

是否可以在编译期间将动态信息输出到编译器输出?

一个更具体的例子(C++ 11):

static_assert(sizeof(A) == 4, "Wrong size of A");
Run Code Online (Sandbox Code Playgroud)

我想输出sizeof(A)断言失败(或者甚至总是)的值,但是消息中static_assert不能包含任何动态信息.

有没有办法输出sizeof(A)编译器日志的值?

c++ c++11

6
推荐指数
0
解决办法
48
查看次数