簡體   English   中英

新運算符 C++17 中的對齊 - Visual Studio

[英]alignment in new operator C++17 - Visual Studio

我在 Visual Studio 2017 C++17 中收到以下程序錯誤:

#include <iostream>
int main()
{
    using namespace std;
    align_val_t alignment = (align_val_t)1024;
    int* p = new(alignment) int(3);
    cout << (unsigned long long)(p) % 1024;
    delete p;
}

錯誤 C2956 大小的釋放函數 'operator delete(void*, size_t)' 將被選為放置釋放函數

該程序在 gcc-8 中編譯沒有錯誤。 如何解決VS中的程序?

這是 MSVC 中的一個錯誤,不幸的是被關閉為“低優先級”: https ://developercommunity.visualstudio.com/t/using-c17-new-stdalign-val-tn-syntax-results-in-er/528320。

解決方法:

  • 直接致電接線員:

     int* p = static_cast<int*>(operator new[](sizeof(int) * 3, align_val_t{1024}));

    但請注意,您還必須調用相應的operator delete[](void* ptr, std::align_val_t al)

  • 如果您可以容忍尺寸為對齊倍數的煩人要求,請使用std::aligned_alloc

  • 使用 MSVC 的非標准_aligned_malloc() 這必須與_aligned_free()配對。

  • 如果您使用的是 x86,請使用 immintrin.h 中的immintrin.h _mm_malloc(size, align) (或只是intrin.h )。 這也必須與_mm_free()配對,但可以在 Windows、Linux 和 MacOS 之間移植。

std::tie 用於 C++17 結構運算符<!--?</div--><div id="text_translate"><p> 考慮以下 C++17 結構:</p><pre> struct S { M1 m1; M2 m2; M3 m3; bool operator<(const S& that) const { return tie() < that.tie(); } auto tie() const { return std::tie(m1,m2,m3); } };</pre><p> 這個對嗎? S::tie會返回成員引用的元組,還是會復制一份? 會自動推斷出正確的類型(引用元組)嗎? constness 做正確的事嗎?</p><p> (我看到的示例對 std::tie 進行了兩次調用,並且沒有像這樣分解為單獨的成員 function。想知道/懷疑是否有原因。)</p></div>

[英]std::tie for C++17 struct operator<?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM