«c++17» 태그된 질문

C ++ 17은 2017 년에 승인 된 C ++ 표준의 이름입니다. 이전 C ++ 14 표준을 기반으로하여 핵심 언어 및 표준 라이브러리를 개선하고 몇 가지 새로운 언어 기능을 추가합니다.

1
std :: vector를 만드는 현대적인 접근 방식으로 정렬 된 메모리 할당
다음과 같은 질문은 답변이 오래된 그러나, 관련 및 사용자의 코멘트 마크 Glisse은 충분히 논의되지 않을 수 있습니다이 문제에 대한 17 ++ C 이후 새로운 접근 방식이 있습니다 제안합니다. SIMD에 대해 정렬 된 메모리가 올바르게 작동하면서 여전히 모든 데이터에 액세스하려고합니다. Intel에서 유형의 float 벡터를 만들고 __m256크기를 8 배 줄이면 정렬 된 …

1
규정되지 않은 sort () — std :: array가 아닌 std :: vector에서 사용될 때 컴파일되는 이유는 무엇입니까?
호출 할 때 std::sort()A의 std::array: #include <vector> #include <array> #include <algorithm> int main() { std::vector<int> foo{4, 1, 2, 3}; sort(begin(foo), end(foo)); std::array<int, 4> foo2{4, 1, 2, 3}; sort(begin(foo2), end(foo2)); } GCC와 그 소리 복귀상의 종류에 오류가 두 std::array- 그 소리가 말한다 오류 : 선언되지 않은 식별자 '정렬'사용; 'std :: sort'를 …
11 c++  c++17 

1
C ++ 17에서 초기화 후 인라인 변수를 변경할 수 있습니까?
내 시나리오는 다음과 같습니다 (clang에서는 작동하지만 gcc에서는 작동하지 않음) liba.hpp : inline int MY_GLOBAL = 0; libother.cpp : (dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp : RunAppThatUsesBothLibAandLibOther(); 문제는 인라인 변수가 런타임에 과도하게 수정되어 28을 예상 한 위치에서 0을 표시한다는 것입니다. MSVC는 이에 동의하지 않지만 clang은 …
11 c++  visual-c++  dll  clang  c++17 

6
루프가 작동하지 않는 무고한 범위
다음은 컴파일 되지 않습니다 . #include <iostream> int main() { int a{},b{},c{},d{}; for (auto& s : {a, b, c, d}) { s = 1; } std::cout << a << std::endl; return 0; } Godbolt에서 사용해보십시오 컴파일러 오류는 다음과 같습니다 error: assignment of read-only reference 's' 이제 실제 경우에는 목록이 클래스의 …

2
weak_ptr 재설정이 shared_ptr에 영향을 줍니까?
나는 사용에 익숙하지 않으며 매우 weak_ptr혼란스러운 상황에 직면하고 있습니다. 내가 사용하고 인텔 XE 2019 작곡가 업데이트 5 ( 패키지 2019.5.281을 함께 combinaison에) 버전의 Visual Studio 2019. 16.2.5 . 64 비트로 컴파일합니다. 표준 C ++ 17을 사용합니다 . 내 스파이크 솔루션의 코드는 다음과 같습니다. #include <memory> #include <iostream> using namespace std; …

3
병렬 실행 정책으로 std :: transform을 대신 사용할 수 있습니까?
I 착각하지 않다, 내가 수 std::transform수행 장소에서 입출력 반복자 같은 범위를 사용하여. std::vector객체 가 있다고 가정 vec하면 쓸 것입니다. std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op) 적절한 단항 연산 사용 unary_op. C ++ 17 표준을 사용하여 std::execution::par첫 번째 인수로 in 을 붙여서 변환을 병렬로 실행하고 싶습니다 . 이렇게하면의 cppreference 기사에서std::transform 함수가 과부하 (1)에서 (2)로 이동합니다 . …

1
템플릿 템플릿 클래스가있는 GCC / C ++ 17의 문제
다음 2 가지 과부하를 고려하십시오 template<typename T> bool test() { return true; } template<template<typename ...> class T> bool test() { return false; } 첫 번째 클래스는 일반 클래스에서 작동하고 두 번째 클래스는 인스턴스화되지 않은 템플릿에서 작동합니다. 예를 들어 : std::cout<<test<int>()<<std::endl; <-- this yields 1 std::cout<<test<std::list>()<<std::endl; <--this yields 0 이제 다음 …
10 c++  templates  gcc  clang  c++17 


5
변형의 색인을 검색 할 수없는 이유는 무엇입니까?
변형의 내용에 액세스하려고합니다. 나는 거기에 무엇이 있는지 모르지만 고맙게도 변형이 있습니다. 따라서 변형에 대한 색인을 요청한 다음 해당 색인을 std::get내용에 사용한다고 생각 했습니다. 그러나 이것은 컴파일되지 않습니다. #include <variant> int main() { std::variant<int, float, char> var { 42.0F }; const std::size_t idx = var.index(); auto res = std::get<idx>(var); return 0; …
10 c++  c++17  variant 

2
읽기 전용 시나리오에서 언제 널 종료 문자열이 필요합니까?
나는 std::string_view도서관 에서 놀고 있었고 std::string_view가능한 한 많이 사용하기 위해 노력하고있는 코드베이스를 변경하려고 생각 하고 있습니다. 그러나 내가 std::string_view대신에 언제 어디에서 사용 해야하는지에 관해 읽은 많은 스레드 에서 const std::string &. "널 종료 문자열이 필요하지 않을 때"라는 많은 답변을 보았습니다. 웹에서 검색을 시작하면서 "널 종료 문자열이 언제 필요합니까?" 나는 그 …

2
연쇄 할 때 복사를 제거하는 방법?
아래의 작은 예제와 같은 체인 유형의 클래스를 만들고 있습니다. 멤버 함수를 연결할 때 복사 생성자가 호출되는 것 같습니다. 복사 생성자 호출을 제거하는 방법이 있습니까? 아래의 장난감 예제에서, 나는 단지 임시적인 것만을 다루고 있으므로 "표준에 의해서가 아니라 논리적으로"소멸해야한다는 것이 명백하다. 제거를 복사하는 두 번째 최선의 선택은 이동 생성자를 호출하는 것이지만, 그렇지 …
10 c++  c++14  c++17 


2
부동 상수에 대한 의사 소멸자를 호출하는 유효한 구문
다음과 같은 실증 프로그램을 고려하십시오. #include <iostream> int main() { typedef float T; 0.f.T::~T(); } 이 프로그램은에 의해 컴파일됩니다 Microsoft Visual Studio Community 2019. 그러나 clang와 gcc같은 오류를 발행 prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T' 7 | 0.f.T::~T(); | ^~~~~ ( 0.f ).T::~T()다음 과 같이 표현식을 작성하면 …

2
프로그래머 수준에서 C ++ std :: atomic으로 보장되는 것은 무엇입니까?
에 대한 여러 기사, 대화 및 스택 오버플로 질문을 듣고 읽었으며 std::atomic그것을 잘 이해하고 싶습니다. MESI (또는 파생) 캐시 일관성 프로토콜, 버퍼 저장, 대기열 무효화 등의 가능한 지연으로 인해 캐시 라인 쓰기 가시성과 약간 혼동되기 때문에. x86은 더 강력한 메모리 모델을 가지고 있으며 캐시 무효화가 지연되면 x86이 시작된 작업을 되돌릴 …

1
연산자 new의 실행 순서와 생성자의 인수
합니까 C ++은 순서 지정 사양 operator new과의 생성자 A에를 new C(A()). g는 순서하자 ++ A()-> new-> C()하지만, 그 소리가하자 ++ new-> A()-> C(). 차이가 지정되지 않은 동작으로 인해 발생합니까? g ++ : 7.4.0 clang ++ : 10.0.0 #include <iostream> #include <cstdlib> struct A { A() { std::cout << "call …
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.