小编Ste*_*hen的帖子

编译器如何使用转发引用推断出此类模板?

我正在研究自C++ 17以来可用的类模板推导.以下是我想问的代码:

#include <iostream>
#include <cmath>
using std::endl;
using std::cout;

template<typename T>
struct MyAbs {
     template<typename U>
     MyAbs(U&& u) : t(std::forward<T>(u))
     { cout << "template" << endl;}

#ifdef ON
    MyAbs(const T& t) : t(t) {}
#endif

    T operator()() const
    {
        return std::abs(t);
    }
    T t;
};

/*
  // may need the following
template<typename U>
MyAbs(U&&) -> MyAbs<typename std::remove_reference<U>::type>;
*/

int main()
{
    const double d = 3.14;
    cout << MyAbs(4.7)() << endl;
    cout << MyAbs(d)() << endl;    
    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-argument-deduction c++17

19
推荐指数
1
解决办法
717
查看次数

尾调用优化适用于此函数吗?

如果 i 是偶数则 bar 调用 bar(i/2),否则调用 bar(3*i + 1),则递归函数 bar 将进行尾递归。

const int bar(const int i) 
{
  if (i < 2) return i;
  return i % 2 ? bar(i/2) : bar(3*i + 1);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果 bar 调用 bar 或 foo,而后者具有与 bar 完全不同的局部变量集,该怎么办?

const int bar(const int i) 
{
  if (i < 2) return i;
  return i % 2 ? bar(i/2) : foo(3*i + 1);
  // where foo is very complicated recursive call that has 
  // 11 different user-defined/primitive type of …
Run Code Online (Sandbox Code Playgroud)

c c++ recursion tail-recursion

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

@Slf4j找不到符号LOG

我知道针对基本相同的错误发布了多个问题。但是,我不认为它们与我的问题相同。

简而言之,我正在尝试编译 oci-java-sdk 附带的示例之一。它无法编译。看起来像一个 jar 文件左右有 LOG 变量,所以我想知道在哪里可以找到该 jar 文件。

详细信息如下。首先,我使用 Oracle Linux,并使用 RPM 安装了 oci-java-sdk。接下来,我将整个示例目录复制到我的主目录。我的 CLASSPATH 如下所示:

$ echo $CLASSPATH
:/usr/lib64/java-oci-sdk/lib/oci-java-sdk-full-1.6.1.jar:/usr/lib64/java-oci-sdk/third-party/lib/*
Run Code Online (Sandbox Code Playgroud)

根据我工作的需要,我尝试构建如下示例:

$ javac -Xlint -cp $CLASSPATH:$PWD/lombok.jar:/usr/share/java/*:/usr/share/java/slf4j/* ./EventsServiceExample.java
Run Code Online (Sandbox Code Playgroud)

如上所示,我是lombok.jar从lombok项目网站下载的。命令javac失败如下:

$ javac -Xlint -cp $CLASSPATH:$PWD/lombok.jar:/usr/share/java/*:/usr/share/java/slf4j/* ./EventsServiceExample.java 
./EventsServiceExample.java:83: error: cannot find symbol
        LOG.info("Number of rules in compartment {} is {}", compartmentId, rulesList.size());
        ^
  symbol:   variable LOG
  location: class EventsServiceExample
./EventsServiceExample.java:135: error: cannot find symbol
            LOG.info(
            ^
  symbol:   variable LOG
  location: class EventsServiceExample
./EventsServiceExample.java:143: error: cannot find symbol …
Run Code Online (Sandbox Code Playgroud)

java slf4j lombok oracle-cloud-infrastructure

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

为什么在函数调用中这么晚才调用复制构造函数?

简而言之,在函数模板内,Foo被 调用的main,采用通用引用并使用假定为 的局部变量的字段Foo,似乎main当 的字段时使用了输入参数的(对 的局部变量的引用)字段Foo提到了“据说是局部变量”。

我的英语水平不太好,无法先用一小段话来总结我的问题。让我首先介绍一些背景。

我有一个类故意错误地实现了所有五个构造函数:

class X {
public:
  X(const std::string& s) : s_(s) {
    std::cout << "X(const std::string&)" << std::endl;
  }
  X() {
    std::cout << "X()" << std::endl;
  }

  X(const X& x) : s_{"copy_con_val"} {
    std::cout << "X(const X&)" << std::endl;
  }

  X(X&& x) : s_{"move_con_val"} {
    std::cout << "X(X&&)" << std::endl;
  }

  X& operator=(const X& x)  {
    s_ = "copy_assign_val";
    std::cout << "X& operator=(const X&)" << …
Run Code Online (Sandbox Code Playgroud)

c++ templates constructor copy

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