小编Jiř*_*ner的帖子

如何有效地返回 std::Optional

我想问如何以std::optional有效的方式返回 an 并且我想使用std::make_optional(). 例如,让我们有这个代码片段:

std::optional<Path> CreateCanonicalPath(const std::string_view& path)
{
  std::error_code errorCode;
  const auto result = std::filesystem::weakly_canonical(std::filesystem::u8path(path), errorCode);
  return !errorCode ? std::make_optional(result) : std::nullopt;
}
Run Code Online (Sandbox Code Playgroud)

result我特别感兴趣的是传递给是否有任何优化std::make_optional。使用起来会不会比较好std::make_optional(std::move(result))

它是否可以防止任何 RVO 或 NVRO?这result是一个局部变量,但它并不完全在 return 语句中,所以我假设编译器不能单独使用 move 。

c++ optimization c++17 stdoptional

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

html CustomElement 有打字稿接口吗?

我正在尝试在打字稿中实现网络自定义元素。我发现自定义元素的生命周期回调如下

  • connectedCallback()
  • adoptedCallback()
  • attributeChangedCallback()

这些回调有打字稿接口吗?我可以使用适当的签名编写这些方法,但我更愿意使用现有的定义。

html typescript custom-element

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

来自 initializer_list 的构造函数

我正在用 C++ 实现一个容器,实际上是一个数组的包装器。我不确定如何从 initializer_list 实现构造函数。我最终得到了这个实现,但在我看来真的很难看。因此可能是在由 initializer_list 初始化的堆中分配的数组。或者有没有一种优雅的方法来做到这一点?

template <typename T> class sequence {
public:
    sequence (size_t n): _data {new T[n]}, _size {n} {};
    sequence (std::initializer_list<T> source);
    ~sequence() { delete[] _data; };
private:
    pointer     _data;
    size_type   _size;
};

//Initializer list constructor
template <class T> sequence<T>::sequence (std::initializer_list<T> source)
: sequence(source.size()) {
    auto iterator = source.begin();
    for ( int i=0; i < _size; i++) {
        _data[i] = *iterator;
        ++iterator;
    }
};
Run Code Online (Sandbox Code Playgroud)

c++ constructor initializer-list

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

模板继承和基本成员变量

尝试使用模板继承时,我遇到了一个奇怪的错误.这是我的代码:

template <class T> class A {
public:
    int a {2};
    A(){};
};

template <class T> class B : public A<T> {
    public:
    B(): A<T>() {};
    void test(){    std::cout << "testing... " << a << std::endl;   };
};
Run Code Online (Sandbox Code Playgroud)

这是错误:

error: use of undeclared identifier 'a'; did you mean 'std::uniform_int_distribution<long>::a'?
    void test(){    std::cout << "testing... " << a << std::endl;   }
Run Code Online (Sandbox Code Playgroud)

如果它可能影响我使用这些标志的东西:

-Wall -g -std=c++11
Run Code Online (Sandbox Code Playgroud)

我真的不知道出了什么问题,因为与没有模板的纯类相同的代码工作正常.

c++ inheritance templates base-class

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

IndexedDB 游标

我的问题很简单。我无法理解MDN 文章中关于从 IndexedDB 迭代结果的示例。具体来说,我看不到任何用于迭代的循环。没有 for/while/do 循环。这是示例:

function displayData() {
  var transaction = db.transaction(['rushAlbumList'], "readonly");
  var objectStore = transaction.objectStore('rushAlbumList');

  objectStore.openCursor().onsuccess = function(event) {
    var cursor = event.target.result;
    if(cursor) {
       var listItem = document.createElement('li');
       listItem.innerHTML = cursor.value.albumTitle + ', ' + cursor.value.year;
       list.appendChild(listItem);  

       cursor.continue();
    } else {
       console.log('Entries all displayed.');
    }
  };
};
Run Code Online (Sandbox Code Playgroud)

javascript indexeddb

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