R-значение передается функции по ссылке C ++ [duplicate]

Динамический SQL PIVOT:

create table temp ( date datetime, category varchar(3), amount money ) insert into temp values ('1/1/2012', 'ABC', 1000.00) insert into temp values ('2/1/2012', 'DEF', 500.00) insert into temp values ('2/1/2012', 'GHI', 800.00) insert into temp values ('2/10/2012', 'DEF', 700.00) insert into temp values ('3/1/2012', 'ABC', 1100.00) DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) FROM temp c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT date, ' + @cols + ' from ( select date , amount , category from temp ) x pivot ( max(amount) for category in (' + @cols + ') ) p ' execute(@query) drop table temp

Результаты:

Date ABC DEF GHI 2012-01-01 00:00:00.000 1000.00 NULL NULL 2012-02-01 00:00:00.000 NULL 500.00 800.00 2012-02-10 00:00:00.000 NULL 700.00 NULL 2012-03-01 00:00:00.000 1100.00 NULL NULL
17
задан Shafik Yaghmour 31 December 2013 в 07:01
поделиться

2 ответа

Как говорили другие, это связано с расширением Microsoft C ++. Хотя флаг /Za не рекомендуется, так как он может сломать вещи.

Вместо этого используйте переключатель /permissive- для лучшего соответствия стандартам, и вы получите здоровые ошибки для этих случаев. Обратите внимание, что этот флаг доступен с VS 2017.

Коммутатор / Za не поддерживает определенные файлы заголовков Microsoft SDK. В противоположность этому / permissive - предлагает полезный режим соответствия, где ввод кода C ++ интерпретируется в соответствии с правилами ISO C ++, но также позволяет соответствовать расширениям, необходимым для компиляции C ++ для целей, поддерживаемых Visual C ++.

Дополнительная информация находится на Visual C ++ Team Blog .

2
ответ дан Onur Gumus 1 September 2018 в 07:17
поделиться

Это старое расширение для Visual Studio, единственной ссылкой, которую я смог найти на сайте Microsoft, был этот отчет об ошибке: Временные объекты могут быть привязаны к ссылкам не-Const , который имеет следующий пример кода :

struct A {};

A     f1();
void f2(A&);

int main()
{
    f2(f1()); // This line SHALL trigger an error, but it can be compiled without any     errors or warnings.
}

Одна из комментариев:

Существует предупреждение уровня 4 (предупреждение уровня 4 включено, если вы передаете / W4 компилятору) для него

Это сообщение в блоге: Visual C ++ настолько либеральна , которая охватывает это расширение:

Использование отключенных языковых расширений (/ Za) делает ошибку:

19
ответ дан Shafik Yaghmour 1 September 2018 в 07:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: